我有一个由package.json驱动的复杂生产环境。
**问题:**我想在本地安装一些附加的软件包,请留意它们的列表和版本。
**解决方案(如何实现):**点 npm 使用另一个配置文件,从git中排除,这将保持我的私有依赖项。使用该文件添加包到本地 node_modules 与 npm install。所以实际上我需要的是改变npm的配置上下文。
我不知道如何让NPM使用不同的配置(类似于 gulp -gulpfile)。
从评论更新开发依赖项不是解决之道。我使用的东西90%的其他开发者不需要安装在他们的node_modules中(事实上,我可以用一种奇怪的方式破坏他们的环境,在git共享的核心项目范围 package.json 中更新开发依赖项)。
5条答案
按热度按时间lbsnaicq1#
首先,您应该知道您所尝试的不仅是怪异的,而且还违背了NodeJS中的许多好的实践和模式。
然而,这是可能的,如果做得好,几乎不会给您或其他不同平台的开发人员带来任何麻烦。
您可以使用一些来自Meteor构建流程的灵感。让我们从概念上将您的项目分为两个不同的部分:
项目结构:
起点是在项目根目录的Base中创建一个
package.json
文件。此包将仅包含构建Internal项目包文件的依赖项。我强烈建议您使用类似Mozilla's Convict的内容,以确保使用ENV正确完成配置。此处的目标是在运行时编写另一个package.json
文件。我们还假设在您的环境中有一个环境变量
USE_WEIRD_MODULES="true"
。您可以在Base项目中使用这个事实来定义您要使用build. js文件安装哪些模块。您可以在运行时读取和编辑它。当它准备好后,将其保存为internal/package.json
。然后,在internal/
目录中运行npm install
。不要忘记将
internal/package.json
文件放入存储库忽略文件(例如:忽略)。为了最大限度地减少项目中这种野蛮更改的影响,您可以在主
package.json
中定义postinstall
脚本中的所有构建例程,这将允许项目根目录中的一个简单npm install
在内部处理所有这些步骤。大概是这样的
vs3odd8k2#
npm
已经提供了一个内置的特性来处理这一需求。要在开发环境和生产环境中使用不同的依赖项,可以通过两种不同的方式将依赖项保存到package.json中。1.您可以使用
save
标志将其另存为普通依赖项(在开发和生产中可用)。例如:1.您可以使用
save-dev
标志将其另存为开发依赖项(仅在开发中可用,在生产中不可用)。例如:当您在服务器上运行npm install时,如果NODE_ENV设置为production,它将不会安装dev依赖项。
更多关于它在这里:https://docs.npmjs.com/cli/install。还有一些附加的概念,如可选的依赖关系等,您也可以使用。
4dbbbstv3#
您可以使用
dev dependencies
而不是使用单独的文件。使用
npm install packageName --dev
安装软件包软件包将位于package.json
的devDependencies
中,例如因此,当您在开发环境中执行
npm install
时,将安装所有依赖项,但在生产开发环境中,将忽略依赖项希望对你有帮助:)
kb5ga3dv4#
你可以书写你自己的自觉。
您需要编写package.json生成器,以便生成package.json,其中仅需要依赖项
用途
此处将创建package.json文件,其依赖性如package.dependencies.js所述。
实现
1.将package.json添加到.gitignore
2.创建文件package.json.builder.js将创建package.json文件
3.创建package.json.hbs(没有依赖项的package.json)
4.创建文件package.dependencies.js对象,该对象仅包含软件包及其版本的列表
falq053o5#
我有点晚了党,但这将帮助某人。你可以检查以下软件包。https://www.npmjs.com/package/penv
它将允许您创建可在多个环境中使用的环境文件。