这在Python中是惯用的:
pip freeze > requirements.txt
pip install -r requirements.txt
第一个命令将需求列表保存到文件中。然后,您可以使用该命令将需求安装到您的环境中。
Node有npm install
,但是我不知道如何将我的依赖项状态转储到package.json。我用Google搜索并找到this:
npm ls | grep -E "^(├|└)─" | cut -d" " -f2 | awk '{FS = "@"; print "\""$1"\"", ":", "\""$2"\""}'
但正如这条管道的作者所说,必须有更好的方法吗?我在这里错过了什么?
我只想将当前的deps转储到package.json中。正如https://npmjs.org/doc/shrinkwrap.html所说,
如果您想使用“npm install”,则仍需要“package.json”文件。
我已经浏览了shrinkwrap
上的信息,但我没有看到如何使用shrinkwrap
完成此任务。
答案 0 :(得分:16)
这是我最接近的
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",
仍然需要修剪最后的尾随逗号,但它非常接近!
答案 1 :(得分:13)
您可以使用npm init
从当前安装的软件包中创建package.json。然后,您可以轻松移动package.json,只需执行npm install
即可在任何地方安装软件包。
答案 2 :(得分:11)
这可能适合你。 npm shrinkwrap
npm shrinkwrap
答案 3 :(得分:2)
以下是解析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