使用与 package.json 不同配置的 npm

2023-12-26

我有一个由 package.json 驱动的复杂生产环境。

问题:我希望在本地安装一些附加软件包,请密切关注它们的列表和版本。

解决方案(如何到达那里): point npm使用另一个配置文件,从 git 中排除,这将保留我的私人依赖项。使用该文件将包添加到本地节点模块 with npm 安装。所以实际上我需要的只是更改 npm 的配置上下文。

我不知道如何让 npm 使用不同的配置(比如gulp-gulp文件).

根据评论更新开发依赖不是正确的出路。我使用的东西 90% 其他开发人员不需要安装在他们的 node_modules 中(事实上我可以break他们的环境以一种奇怪的方式更新 git-shared core 项目范围内的开发依赖项包.json).


首先,你应该知道你所尝试的不仅很奇怪,而且违背了 NodeJS 中的许多良好实践和模式。

尽管如此,这是可能的,如果做得正确,几乎不会给您或不同平台上的其他开发人员带来任何麻烦。

你可以使用一些有点灵感的东西Meteor http://meteor.com构建流程。让我们从概念上将您的项目分为两个不同的部分:

  • Base:处理项目初始化。
  • Internal原来的项目。

项目结构:

- build.js (base build script)
- package.json (base package)
- internal/
  - package.template.json (project package template)
  - app.js (your actual project files)
  - [...]  (your actual project files)

起点是创建一个package.json文件到Base,在项目的根目录中。该包将仅包含构建包文件的依赖项Internal项目。我强烈建议你使用类似的东西Mozilla 的罪犯 https://github.com/mozilla/node-convict确保使用 ENV 正确完成配置。这里的目标是再写一个package.json运行时文件。

我们还假设您的环境中有一个环境变量USE_WEIRD_MODULES="true"。您可以在Base项目来定义您要使用以下命令安装哪些模块build.js文件。您可以在运行时读取和编辑它。准备好后,将其另存为internal/package.json。然后,运行npm install在 - 的里面internal/目录。


build.js

let pkg = require('./package.template.json');    

if(process.env.USE_WEIRD_MODULES) {

    // Install your weird packages        
    pkg.dependencies.some_dev_package = '^v0.2.2';
    pkg.dependencies.another_dev_package = '^v0.2.2';


}

// Don't forget to save the package.json in the end
fs.writeFileSync('./internal/package.json', JSON.stringify(pkg, null, 2), 'utf8');

别忘了把internal/package.json存储库中的文件忽略文件(例如:gitignore)。

为了最大程度地减少项目中这种粗暴更改的影响,您可以在 main 中定义package.json所有的建筑程序postinstall脚本。它将允许一个简单的npm install在项目的根目录中内部处理所有这些步骤。

像这样的事情:

包.json

{
  [...]
  "scripts": {
    "postinstall": "node build.js && cd internal/ && npm install",
    "start": "node internal/app.js"
  }
  [...]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用与 package.json 不同配置的 npm 的相关文章

随机推荐