NodeJS 如何安装npm以只保存对包.json的依赖?

pokxtpni  于 2023-01-08  发布在  Node.js
关注(0)|答案(6)|浏览(175)

我正在向一个package.json添加依赖项,该package.json将用作虚拟机配置过程的一部分。因此,我实际上不需要在本地安装模块,因为配置程序将在VM内部为我完成此操作。那么,是否有任何方法可以执行以下操作:

npm install --save <module>

所以它 * 只 * 在package.json中为模块的最新版本创建一个依赖项,而不实际下载模块或创建一个node_modules文件夹?
--dry-run选项关闭,因为它不创建node_modules文件夹,但也不写入package.json
目前,我在每次需要更新包时都会手动执行以下操作,然后再重新配置VM:

rm -rf node_modules

其他原因可能包括能够在低带宽的情况下轻松构建package.json文件,例如网络共享,在这种情况下,您知道最终将需要该模块,但不想腾出带宽。

amrnrhlw

amrnrhlw1#

正在搜索解决方案。未找到,然后创建一个脚本,将依赖项(最新或指定版本)添加到package.json文件,跳过安装过程。
https://www.npmjs.com/package/add-dependencies
安装
如果不与npx一起使用(参见下文):

$ npm install add-dependencies [-g]

用法

运行:

$ add-dependencies [package_file] <dependencies> [target] [--no-overwrite]

或与npx

$ npx add-dependencies [package_file] <dependencies> [target] [--no-overwrite]

其中,dependencies是按空格划分的从属关系列表,target是以下值之一:

  • --dev/--save-dev/-D用于devDependencies
  • x1米9英寸1x/--save-peer/x1米11英寸用于x1米12英寸1x
  • --optional/--save-optional/-O用于optionalDependencies

如果未传递target参数,则依赖项将写入dependencies
如果未传递package_file参数,脚本将在当前工作目录中搜索package.json文件。
使用--no-overwrite标志防止package.json中已有的包被覆盖。
示例:

$ add-dependencies /home/user/project/package.json moment@2.0.0 react@16.8 redux eslint --dev

或与npx

$ npx add-dependencies /home/user/project/package.json moment@2.0.0 react@16.8 redux eslint --dev

希望这能帮助到其他人。

nnsrf1az

nnsrf1az2#

有趣的是,将--package-lock-only--no-package-lock结合使用似乎可以做到这一点

npm install --package-lock-only --no-package-lock PACKAGE

此操作不会创建或更新package-lock.json文件,而只是向package.json添加一个条目
更新
这实际上是一个bug,现在已在npm 6.9.0中修复
https://github.com/npm/cli/pull/146
https://npm.community/t/release-npm-6-9-0/5911

ac1kyiln

ac1kyiln3#

据我所知,npm无法做到这一点。
有两个npm包可以完成此操作;这两种方法我都没用过,但也许值得一试:

希望这有帮助!

dphi5xsq

dphi5xsq4#

当Npm〉8时,正确答案为

npm pkg set devDependencies.rollup="*" devDependencies.typescript="4.5"

npm pkg set可以更改您当前的package.json
参见:https://docs.npmjs.com/cli/v7/commands/npm-pkg

ewm0tg9j

ewm0tg9j5#

我做了一个非常简单的方法来做到这一点。
将以下内容添加到package.jsonscripts部分:

"scripts": {
    "no-dl": "npm install --package-lock-only --no-package-lock"
  }

然后像这样使用它:

npm run no-dl <package-name>

我将其命名为no-dl-根据需要选择您自己的名称。

6ljaweal

6ljaweal6#

npm install --save packagename,然后npm uninstall packagename(不带--保存标志)完成此操作,尽管创建了一个空的node_modules文件夹

相关问题