我正在尝试开发一个软件包,以便轻松导入预构建的模块。 所以我想要介绍的用例是项目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}}是否可行?
答案 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)
因此,最后的建议不会添加需要升级信息的脚本。
参考文献: