NPM:不要为npm包安装嵌套的可选依赖项
我正在创作一个我想发布到NPM的包A.
A依赖于程序包B,而程序包依次依赖于程序包C.然后C具有两个可选的本地依赖项D和E.我知道对于可选的依赖关系D和E我没有用处,也绝对不想当有人安装我的软件包时尝试安装它们。
我知道你可以使用命令npm install A --no-optional -g
来安装没有可选依赖项的软件包,但是这会是知识/开销,我宁愿使用软件包的用户不需要。
有没有任何npm的configuration或解决scheme的消费者包A可以只是npm install A
或npm 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.