35

这在 Python 中是惯用的:

pip freeze > requirements.txt
pip install -r requirements.txt

第一个命令将需求列表保存到文件中。然后稍后您可以使用该命令将要求安装到您的环境中。

Node 有npm install,但我不知道应该如何将我的依赖项状态转储到 package.json。我用谷歌搜索并发现了这个

npm ls | grep -E "^(├|└)─" | cut -d" " -f2 | awk '{FS = "@"; print "\""$1"\"", ":", "\""$2"\""}'

但正如这条管道的作者所暗示的那样,一定有更好的方法吗?我在这里想念什么?

我只想将我当前的部门转储到 package.json 中。正如https://npmjs.org/doc/shrinkwrap.html所说,

如果要使用“npm install”,仍然需要“package.json”文件。

我浏览了有关 的信息shrinkwrap,但我没有看到如何简单地使用shrinkwrap.

4

5 回答 5

19

这是我得到的最接近的

npm 冷冻

npm ls | grep -E "^(├|└)─" | cut -d" " -f2 | awk -v quote='"' 'BEGIN { FS = "@" } ; { print quote $1 quote,":",quote $2 quote"," }' | sed -e 's/ :/:/g'

输出就像

  "bower": "1.3.12",
  "chai": "2.1.2",
  "cucumber": "0.4.8",

仍然需要修剪最后的尾随逗号,但它非常接近!

于 2015-05-15T10:20:18.267 回答
14

您可以使用 . 从当前安装的包中创建一个 package.json npm init。然后,您可以轻松移动 package.json 并简单地将包npm install安装到您想要的任何位置。

于 2013-07-10T17:58:57.803 回答
12

这可能对你有用。npm 收缩包装

npm shrinkwrap
于 2014-05-30T04:58:48.560 回答
3

这是解析的命令的替代较短版本npm ls

npm ls | grep -o "\S\+@\S\+$" | tr @ ' ' | awk -v q='"' '{print q$1q": "q"^"$2q","}'

这是一个值得添加到您的 shell rc文件中的别名:

alias npm-freeze='npm ls | grep -o "\S\+@\S\+$" | tr @ " " | awk -v q='\''"'\'' '\''{print q$1q": "q"^"$2q","}'\'''

并将其运行为:

npm-freeze

输出如下:

"backbone": "^1.3.2",
"underscore": "^1.8.3",
"bootstrap": "^3.3.6",
"bootstrap-sass": "^3.3.6",
"grunt": "^0.4.5",

要过滤,只需将其输入grep,例如

$ npm-freeze | grep grunt
"grunt": "^0.4.5",
"grunt-cli": "^0.1.13",
"grunt-contrib-watch": "^0.6.1",
"grunt-sass": "^1.1.0",
"load-grunt-tasks": "^3.4.1",

这是将输出保存到package.json并运行的示例npm install

printf "{\n"\""name"\"": "\""npm-freeze"\"",\n"\""dependencies"\"": {\n$(npm-freeze | grep grunt | head -c -2)\n}\n}" | tee package.json && npm install
于 2016-03-16T10:43:55.923 回答
1

它似乎通过package-lock.json https://docs.npmjs.com/cli/v7/configuring-npm/package-lock-json内置到 NPM 版本 6+

于 2021-10-04T21:30:52.040 回答