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

时间:2015-03-26 10:38:12

标签: node.js dependencies npm

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

5 个答案:

答案 0 :(得分:32)

2016年1月更新

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

所以只安装了 node_modules 文件夹下划线

npm init --yes

然后:

cat package.json

包含在package.json中:

"dependencies": {
    "underscore": "^1.8.3"
  },

答案 1 :(得分:25)

更新:随着npm v3的推出,此技巧将在package.json文件上创建大量不需要的条目。那是因为@ sunny-mittal指出模块依赖性现在已经变平了。

据我所知,

npm不支持这一点。您必须重新安装通过--save的每个包到每个包。

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

npm install $(ls node_modules/) --save

它将重新安装软件包,并将其package.json保存为dependencies

答案 2 :(得分:3)

由于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

答案 3 :(得分:2)

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

答案 4 :(得分:-1)

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

  1. 转到根文件夹,项目终端中存在 package.json
  2. 然后运行以下命令。
  3. private static void testWithThreads() { final Worker worker = new Worker(); new Thread(() -> { System.out.println("start read thread"); for (int i = 0; i < 20; i++) { worker.readData(); // any thread can now invoke writeData() if current thread is before next invocation of worker.readData(); } try { Thread.currentThread().join(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); new Thread(() -> { System.out.println("start write thread"); for (int i = 0; i < 20; i++) { worker.writeData(); // any thread can now invoke readData() if current thread is before next invocation of worker.writeData(); } try { Thread.currentThread().join(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); }