NPM:不要为npm包安装嵌套的可选依赖项

我正在创作一个我想发布到NPM的包A.

A依赖于程序包B,而程序包依次依赖于程序包C.然后C具有两个可选的本地依赖项D和E.我知道对于可选的依赖关系D和E我没有用处,也绝对不想当有人安装我的软件包时尝试安装它们。

我知道你可以使用命令npm install A --no-optional -g来安装没有可选依赖项的软件包,但是这会是知识/开销,我宁愿使用软件包的用户不需要。

有没有任何npm的configuration或解决scheme的消费者包A可以只是npm install Anpm install -g A和可选的依赖关系将永远不会被安装?

谢谢

 npm install A --no-optional 

testing,看看是否一切正常。

 npm list 

确保你没有错误。

 npm shrinkwrap 

这将locking包的依赖关系。

这样npm install会在尝试安装依赖关系之前查看npm-shrinkwrap.json。

你可以在这里阅读更多关于https://docs.npmjs.com/cli/shrinkwrap

它感觉像optional不是可选的,但有一些你可以做的是使用peerDependencies而不是optionalDependencies

我假设你使用npm v2.x,所以当你做一个原始的npm install你将得到所有的依赖关系,可选的依赖关系和对等关系。

npm v3中,依赖关系不会默认安装。

使用npm v2时现在显示警告的示例:

 npm WARN peerDependencies The peer dependency redux@^2.0.0 || ^3.0.0 included from react-redux will no npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.