npm二级依赖需要获得一级依赖包.json(npm子模块依赖管理)

时间:2017-02-01 15:10:51

标签: node.js npm node-modules

我正在尝试开发一个软件包,以便轻松导入预构建的模块。 所以我想要介绍的用例是项目X使用预构建的模块Y,所以我的模块可以通过GitHub版本轻松创建这个预构建的发行版。 所以我期待这样的依赖结构:

X
|-Y
  |-any-prebuilt

但是当我使用

导入时,我目前正处于最高级别
X
|-Y
|-any-prebuilt

所以npm和纱线似乎也把结构弄平了,因为我可以在我预期的二级依赖的postinstall上查看我的错误。

bash-3.2$ npm install

> any-prebuilt@0.0.3 postinstall /Users/me/workspace/<X>/node_modules/any-prebuilt
> node install.js

Fetching prebuilt:
 version: latest

Platform: osx
Arch: x64
Target dir: ./bin
required user & repo

在这种情况下,我有2个问题,我在这里缺少什么?我any-prebuilt获取package.json的{​​{1}}是否可行?

https://github.com/kanekotic/any-prebuilt

1 个答案:

答案 0 :(得分:0)

所以我想我现在可以回答我自己的问题了。从npm版本3开始,结构默认为扁平化(对于纱线而言相同),在依赖性冲突的情况下,它将是非平坦的。

因此对于未来的人来说(如果有的话),如果你是最终项目,你可以在运行npm install时使用一个标志。

npm install --legacy-bundling

在我的情况下,这不是一个可能性,所以我不得不修改我的代码,使其更加面向API。所以使用我的lib的预构建包实际上必须提供信息。

我已经将postinstall事件提升了一级。所以basicalle在postbuild.js中声明Y文件:

require('any-prebuilt').install(require('./package.json').prebuilt)

因此,最后的建议不会添加需要升级信息的脚本。

参考文献:

https://codingwithspike.wordpress.com/2016/01/21/dealing-with-the-deprecation-of-peerdependencies-in-npm-3/

https://docs.npmjs.com/cli/install