2017-07-15 41 views
7

我们的团队刚刚更新为npm @ 5。 package-lock.json在Windows和Mac之间统一(某些依赖项是可选的,因此它们不会在Windows上安装,但它们在Mac上执行),因此无论机器如何,我们都会生成相同的node_modules结构。这都很好,那么每一个团队成员通过以下步骤去的:什么是“要求:真”在package-lock.json中做什么

  1. rm -rf node_modules
  2. git pull
  3. npm install

这实际上就完全适用于所有的团队成员,除了一个,谁在npm install之后修改了package-lock.json。修改后的一行是删除了"requires": true

所以我看到:

{ 
    ... 
    "version": "0.0.1", 
    "lockfileVersion": 1, 
    "requires": true, 
    "dependencies": { 
    ... 
} 

但他看到:

{ 
    ... 
    "version": "0.0.1", 
    "lockfileVersion": 1, 
    "dependencies": { 
    ... 
} 

有谁知道为什么requires: true可能与某些计算机而不是其他的package-lock.json文件被删除?另外,对这个属性做些什么不会有什么伤害。 :)

在此先感谢!

+0

我有同样的问题。我正在使用'node 8.1.2'和'npm 5.0.4'。看看他们的文档,没有提到任何“需要”。我也很好奇这是什么。请注意,删除它似乎不会实际上破坏任何东西(适用于我们的CI和分段服务器) – lkartono

+0

更新:它似乎与npm版本有关。刚刚更新为'npm 5.1.0','require:true'消失。然而,我所有的依赖现在都有一个“require”键。我认为'require:true'强制'package-lock.json'以嵌套的方式列出依赖关系的依赖关系。 – lkartono

+0

请参阅https://github.com/npm/npm/pull/19307获取将规范文件中的解释移至帮助页面的PR –

回答

3

正如我在我的评论中怀疑的那样,自5.1.0以来requires字段已被添加。你可以在这里看到相关的拉请求https://github.com/npm/npm/pull/17508(更新日志可见这里https://github.com/npm/npm/releases/tag/v5.1.0

引述它说:

这有修复了一把:

  1. 它引入了一个新的套餐 - lock.json字段,称为require,其中 用于跟踪给定模块需要的模块。
  2. .....

为了避免这些类型的冲突,我劝你(和我一样),以确保您所有的队友都使用相同的npm版本。

UPDATE

升级npm5.1.0版本后,我是有缺失的依赖关系(上角4应用程序的工作)的麻烦。如果有人遇到同样的问题,这是我做了什么来解决它:

rm -rf node_modules 
npm prune 
npm install 

希望它有帮助。

+1

接受答案为因为我们都需要使用相同的NPM版本。我们还发现,将所有依赖关系列为devDependencies是有问题的,因为NPM存在解决devDependencies相关性的问题。最后,可选模块将在某些机器上安装,而不是其他模块。一旦我们使用了相同版本的NPM并修复了依赖性,我们现在按照以下步骤更新模块: 'rm -rf node_modules && npm install --no-optional' – atdrago

相关问题