npm - 将安装的包保存为依赖项

Posted

技术标签:

【中文标题】npm - 将安装的包保存为依赖项【英文标题】:npm - save installed packages as dependencies 【发布时间】:2015-05-30 08:16:07 【问题描述】:

我已经通过npm install $package 安装了一些软件包,但没有先设置package.json。 现在我想创建一个package.json 文件,但将所有已安装的包保留为依赖项。 简单地运行npm init 不提供此选项,我可以自动实现吗?

【问题讨论】:

【参考方案1】:

更新:随着 npm v3 的推出,这个技巧将在您的 package.json 文件中创建大量不需要的条目。这是因为模块依赖关系现在被扁平化了,正如@sunny-mittal 指出的那样。

npm 不支持,据我所知。您必须重新安装每个将 --save 传递给每个软件包的软件包。

但是,如果您使用的是基于 Unix 的系统,则有一种解决方法。在您的项目根文件夹中,已经创建了一个 package.json 文件(npm init,正如您所提到的),运行:

npm install $(ls node_modules/) --save

它会重新安装这些包,并将它们保存到package.jsondependencies

【讨论】:

应该注意的是,在 npm 3+ 中,依赖关系被扁平化了很多,ls node_modules 技巧虽然超级聪明,但最终会创建很多不需要的条目。【参考方案2】:

由于 NPM node_modules 现在是平的,@Rodrigo 的回答并没有很好地处理这个问题。

这是我编织在一起的。

npm list --depth=0 | sed "1d" | sed -E "s/^[\`+-]+\s//" | sed -E "s/@(.*)$//"

这基本上是ls node_modules 之前所做的。

单线保存安装。

npm install $(npm ls | sed "1d" | sed -E "s/^[\`+-]+\s//" | sed -E "s/@(.*)$//") --save

我正在使用

$ npm --version 
3.5.3

这样的列表。

$ npm list --depth=0
x@0.1.0 /home/victor/x
+-- babel-eslint@5.0.0-beta6
+-- babel-preset-es2015@6.3.13
+-- gulp@3.9.0
+-- gulp-babel@6.1.1
`-- gulp-eslint@1.1.1

【讨论】:

在我的情况下,npm install $(npm ls | sed "1d" | sed -E "s/^[`+-]+\s//" | sed -E "s/@(.*)$//") --save 不起作用,因为正在返回树表示,所以我运行了npm install $(ls node_modules/ | sed "1d" | sed -E "s/^[`+-]+\s//" | sed -E "s/@(.*)$//") --save,它就像一个美女一样工作。谢谢!【参考方案3】:

2016 年 1 月更新

npm 现在支持开箱即用。我有 npm 版本 3.5.2

所以只需要一个安装了 underscorenode_modules 文件夹。

npm init --yes

然后:

cat package.json

包含在 package.json 中:

"dependencies": 
    "underscore": "^1.8.3"
  ,

【讨论】:

嗯,当我运行它时,它什么也没做。虽然,我的 node_modules 目录位于祖先文件夹中,所以这可能就是原因【参考方案4】:

我写了一个名为pkg-save的模块。 如果您的 npm 版本是“2.x.x”,您可以尝试一下。 我没有在npm v3中测试过,所以不知道在npm v3中有没有用。

【讨论】:

【参考方案5】:

我从 bitbucket 克隆一个新项目时遇到了这个问题。我通过以下步骤解决了这个问题:

    转到您的项目终端中存在 package.json根文件夹。 然后运行以下命令。

$ npm install

【讨论】:

这是一个完全不同的问题。在我原来的帖子中,package.json 文件丢失了,但模块位于node_modules。您所描述的是基于现有package.json 安装模块的常规工作流程。

以上是关于npm - 将安装的包保存为依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何将通过 npm 安装的所有依赖项保存到我的 package.json 文件中?

从私有 gitlab 存储库中使用 npm 安装依赖项

通过 package.json 安装“全局”npm 依赖项 [重复]

为啥 NPM 7.17 不安装我的对等依赖项

当我的包是嵌套依赖项时,某些文件未安装,即使它们在作为直接依赖项添加时已安装

使用 npm 安装或更新所需的包,就像 ruby​​gems 的 bundler