node.js - package.json 用于全局依赖项

标签 node.js npm

在编写 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测试运行者。这也意味着您有一个非常好的地方,让人们可以立即知道他们可以使用哪些命令,并且它有助于整个社区的一致性。注意,starttest npm 中的特殊名称,因此对于其他任意命令,您需要运行 npm run-script <scriptname>

通常,我会遵循这样的模式:如果它对于模块的构建和运行至关重要,则不需要全局模块,但如果需要,可以使用它们来支持增强的工作流程。 这里最主要的是我会列出绝对关键的脚本。 可选使用全局模块并没有什么问题。例如,您可能有大量的 grunt 命令,并且您无法列出 package.json 中的每个排列。那很好。对于您的机器,您可以全局安装 grunt-cli这样您就可以运行 Gruntfile 公开的所有命令.

关于node.js - package.json 用于全局依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23623387/

相关文章:

javascript - 在 Windows 7 上安装 contextify 错误 : `gyp` failed with exit code: 2

javascript - Eslint 不适用于本地系统

javascript - 在 AngularJS 和 Nodejs 之间共享代码

javascript - 如何在运行 Node.js 应用程序之前确保 MySQL 数据库存在

node.js - 使用express和archiver创建zip

Node.js、Firefox 错误 : no common encryption algorithm(s).(错误代码:ssl_error_no_cypher_overlap)

node.js - 如何从远程服务器调用本地运行的Web服务器

node.js - 通过 G Suite 电子邮件地址从服务器发送电子邮件

mysql - react js mysql : TypeError: Cannot read property 'affectedRows'

npm - 如何在不更新其他软件包的情况下 `yarn add`?