使用纯 npm 脚本创建 vendor.js 包

Create vendor.js bundle with pure npm script

我正在尝试在没有 Grunt 或 Gulp 的情况下构建 javascript 应用程序的现代方法。我正在通过使用 package.json 中的 scripts 关键字来创建我的构建实用程序。

效果很好,但我 运行 遇到了挑战。有没有一种好方法可以创建单独的 vendor.jsapp.js 包,而无需在 browserify 命令中明确显示每个依赖项(或者将 dep 列表传递给 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关键字中的信息。显然,我不希望我的代码中未使用 bundle devDependencies 或依赖项(即使后者可以通过良好维护需求来避免)。

是的,这是可能的。解决方案是否非常优雅,我将由您决定。基本上它可以归结为如下内容(不完整,尚未调用 browserify)片段:

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

初始化脚本用于提取依赖项。供应商脚本调用此脚本,并将其转换为 browserify 的输入参数。

注意 1:我正在使用 jq 从依赖项树中提取信息。 注 2:参数列表的构建也可以在初始化脚本中完成。您将必须提供一个环境变量来区分 -r 或 -x 选项。