用纯npm脚本创buildvendor.js包

我正在尝试使用现代方法来构build不使用Grunt或Gulp的JavaScript应用程序。 我正在使用package.jsonscripts关键字来创build我的编译工具。

它工作的很好,但我遇到了一个挑战。 有没有一种很好的方法来创build单独的vendor.jsapp.js包,而不必在vendor.js命令中明确地指定每个依赖项(或者将vendor.js列表命令传递给browserify命令)?

比以下更好的东西:

 "dependencies": { "react": "latest", "react-dom": "latest", "redux": "latest", "d3": "latest" }, "devDependencies": { "browserify": "latest" }, "scripts": { "vendor": "browserify -r react -r react-dom -r redux -r d3 > vendor.js", "app": "browserify -x react -x react-dom -x redux -x d3 ./app/main.js > app.js" } 

最好是,我会回收存储在dependencies关键字中的信息。 显然,我不希望捆绑devDependencies或依赖不使用在我的代码(即使后者可以通过良好的维护要求来防止)。

对的,这是可能的。 无论解决scheme是非常优雅的,我会留给你决定。 基本上可以归结为以下内容(不完整的,浏览器尚未调用)的片段:

  "scripts": { "init": "npm ls -json --depth 0 | jq .dependencies | jq keys[]", "vendor": "npm run --silent init | sed 's/\\(.*\\)/-r \\1/g' | xargs" }, 

init脚本用于提取依赖关系。 供应商脚本调用此脚本,并将其转换为browserify的input参数。

注1:我使用jq从依赖关系树中提取信息。 注2:参数列表的构造也可以在init脚本中完成。 您将不得不提供一个环境variables来区分-r或-x选项。