npm 2nd level dependency need to get 1st level dependency package.json (npm submodule dependency management)

npm 2nd level dependency need to get 1st level dependency package.json (npm submodule dependency management)

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

X
|-Y
  |-any-prebuilt

但是我目前在使用

导入时达到了我的最高水平
X
|-Y
|-any-prebuilt

所以 npm 和 yarn 似乎正在使结构变平,因为我可以在我预期的二级依赖项的安装后发现我的错误。

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 是否可以得到 Ypackage.json

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

所以我想我现在可以回答我自己的问题了。自 npm 版本 3 以来,结构默认是扁平化的(纱线也是如此),在依赖冲突的情况下它只是非扁平化的。

因此,对于最终来到这里的人(如果有的话),如果您是最终项目,则有 2 个选项,您可以在 运行 npm install 时使用标志。

npm install --legacy-bundling

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

我已经通过了安装后事件一级。所以 basicalle 在 Y 中声明了一个 postbuild.js 文件:

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