在编写 Node.js 应用程序时,几乎总是您不仅需要处理本地依赖项,还需要处理应用程序所需的全局包。处理这个问题的最佳和常见方法是什么?我发现可以在预安装阶段运行 npm
"scripts": {
"preinstall": "npm i -g grunt-cli"
}
虽然从 npm 脚本本身运行 npm install 很奇怪,但我想这可行。
但是如果需要安装多个软件包就不太方便了。是否可以告诉npm
从另一个文件(即package.global.json
)获取所有列出的包并全局安装它们?
再说一次,有某种约定吗?
最佳答案
我认为您的构建过程需要全局模块是 code smell 。他们工作得很好,但他们反对npm
因为它们不能直接添加为依赖项。相反,使用包含 bin
的包要执行的脚本,我建议使用 scripts
领域 package.json
提供一组命令。
例如:
"dependencies": {
"grunt-cli": "..."
},
"scripts": {
"start": "grunt server",
"test": "grunt test"
}
当您运行npm start
时, npm
会自动添加grunt-cli
的位置模块进入PATH
,然后执行grunt
命令启动服务器,并运行 npm test
将调用grunt
测试运行者。这也意味着您有一个非常好的地方,让人们可以立即知道他们可以使用哪些命令,并且它有助于整个社区的一致性。注意,start
和test
npm
中的特殊名称,因此对于其他任意命令,您需要运行 npm run-script <scriptname>
通常,我会遵循这样的模式:如果它对于模块的构建和运行至关重要,则不需要全局模块,但如果需要,可以使用它们来支持增强的工作流程。
这里最主要的是我会列出绝对关键的脚本。 可选使用全局模块并没有什么问题。例如,您可能有大量的 grunt 命令,并且您无法列出 package.json
中的每个排列。那很好。对于您的机器,您可以全局安装 grunt-cli
这样您就可以运行 Gruntfile
公开的所有命令.
关于node.js - package.json 用于全局依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23623387/