有没有办法自动生成 bundledDependencies 列表?
Posted
技术标签:
【中文标题】有没有办法自动生成 bundledDependencies 列表?【英文标题】:Is there a way to generate the bundledDependencies list automatically? 【发布时间】:2012-03-27 23:08:15 【问题描述】:我有一个要部署到 Nodejitsu 的应用程序。最近,他们遇到了 npm 问题,导致我的应用程序在我尝试(但失败)重新启动它后离线几个小时,因为它的依赖项无法安装。我被告知将来可以通过在我的 package.json 中将我的所有依赖项列为 bundledDependencies
来避免这种情况,从而导致依赖项与应用程序的其余部分一起上传。这意味着我需要我的 package.json 看起来像这样:
"dependencies":
"express": "2.5.8",
"mongoose": "2.5.9",
"stylus": "0.24.0"
,
"bundledDependencies": [
"express",
"mongoose",
"stylus"
]
现在,从 DRY 的角度来看,这并不吸引人。但更糟糕的是维护:每次添加或删除依赖项时,我都必须在两个地方进行更改。有没有可以用来同步bundledDependencies
和dependencies
的命令?
【问题讨论】:
PING :) 这回答了你的问题还是还有什么需要解决的? 【参考方案1】:如何实现一个grunt.js 任务来完成它?这有效:
module.exports = function(grunt)
grunt.registerTask('bundle', 'A task that bundles all dependencies.', function ()
// "package" is a reserved word so it's abbreviated to "pkg"
var pkg = grunt.file.readJSON('./package.json');
// set the bundled dependencies to the keys of the dependencies property
pkg.bundledDependencies = Object.keys(pkg.dependencies);
// write back to package.json and indent with two spaces
grunt.file.write('./package.json', JSON.stringify(pkg, undefined, ' '));
);
;
将它放在项目的根目录中的一个名为grunt.js
的文件中。要安装 grunt,请使用 npm:npm install -g grunt
。然后通过执行grunt bundle
打包包。
一位评论员提到了一个可能有用的 npm 模块:https://www.npmjs.com/package/grunt-bundled-dependencies(我还没有尝试过。)
【讨论】:
接受了你的答案并建立了一个图书馆..github.com/GuyMograbi/grunt-bundled-dependencies。请考虑添加到您的答案中。【参考方案2】:您可以使用简单的 Node.js 脚本来读取和更新 bundleDependencies
属性并通过 npm 生命周期挂钩/脚本运行它。
我的文件夹结构是:
scripts/update-bundle-dependencies.js
package.json
scripts/update-bundle-dependencies.js
:
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const pkgPath = path.resolve(__dirname, "../package.json");
const pkg = require(pkgPath);
pkg.bundleDependencies = Object.keys(pkg.dependencies);
const newPkgContents = JSON.stringify(pkg, null, 2);
fs.writeFileSync(pkgPath, newPkgContents);
console.log("Updated bundleDependencies");
如果您使用的是最新版本的npm
(> 4.0.0),您可以使用prepublishOnly
或prepack
脚本:https://docs.npmjs.com/misc/scripts
prepublishOnly:在准备和打包包之前运行,仅在 npm 发布。 (见下文。)
prepack:在打包 tarball 之前运行(在 npm pack、npm publish 和 安装 git 依赖项时)
package.json
:
"scripts":
"prepack": "npm run update-bundle-dependencies",
"update-bundle-dependencies": "node scripts/update-bundle-dependencies"
您可以通过运行npm run update-bundle-dependencies
自行测试。
希望这会有所帮助!
【讨论】:
不是bundledDependencies
而不是pkg.bundleDependencies = Object.keys(pkg.dependencies);
以上是关于有没有办法自动生成 bundledDependencies 列表?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法自动生成 bundledDependencies 列表?