我已配置并运行工作区。
当我从根目录安装时,有时包会安装在根目录中,有时会安装在工作区node_modules中。
NPM 何时以及如何选择在 root/node_modules 与工作空间/node_modules 安装包?
事实证明,当两个包依赖于依赖项中具有兼容版本号的同一模块时,npm(带有工作区)将仅在root/node_modules. 否则,它将安装在node_modules软件包中。
在此示例中,react-dom包之间共享相同的版本:
customer-ui@1.0.0 /home/ubuntu/name/customer-ui\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac components@0.15.0 -> ./packages/components\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac react-cosmos@5.7.2\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac react-cosmos-shared2@5.7.1\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac react-element-to-jsx-string@14.3.4\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 react-dom@17.0.2 deduped\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 react-dom@17.0.2\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac react-modal@3.15.1\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 react-dom@17.0.2 deduped\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac react-to-print@2.14.7\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 react-dom@17.0.2 deduped\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac styled-components@5.3.5\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 react-dom@17.0.2 deduped\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xac embedded@0.1.0 -> ./packages/embedded\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 react-dom@17.0.2 deduped\nRun Code Online (Sandbox Code Playgroud)\nnpm 仅将其安装在root/node_modules目录中:
\xe2\x9d\xaf ls node_modules/react-dom\nLICENSE build-info.json index.js profiling.js server.js test-utils.js\nREADME.md cjs package.json server.browser.js server.node.js umd\n\n\xe2\x9d\xaf ls packages/embedded/node_modules/react-dom\nls: cannot access 'packages/embedded/node_modules/react-dom': No such file or directory\n\n\xe2\x9d\xaf ls packages/components/node_modules/react-dom\nls: cannot access 'packages/components/node_modules/react-dom': No such file or directory\nRun Code Online (Sandbox Code Playgroud)\n但是,对于包之间版本不兼容的包,情况有所不同:
\n\xe2\x9d\xaf npm ls argparse\ncustomer-ui@1.0.0 /home/ubuntu/name/customer-ui\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac @components@0.15.0 -> ./packages/components\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac eslint@8.17.0\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac js-yaml@4.1.0\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 argparse@2.0.1\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xac embedded@0.1.0 -> ./packages/embedded\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac eslint@6.8.0\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac js-yaml@3.14.1\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 argparse@1.0.10\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac jest-preset-preact@4.0.5\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac babel-jest@27.5.1\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac babel-plugin-istanbul@6.1.1\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac @istanbuljs/load-nyc-config@1.1.0\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac js-yaml@3.14.1\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 argparse@1.0.10\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac microbundle@0.12.4\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac cssnano@4.1.11\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac cosmiconfig@5.2.1\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac js-yaml@3.14.1\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 argparse@1.0.10\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac cssnano-preset-default@4.0.8\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac postcss-svgo@4.0.3\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac svgo@1.3.2\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac js-yaml@3.14.1\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 argparse@1.0.10\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac rollup-plugin-postcss@2.9.0\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac postcss-load-config@2.1.2\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac cosmiconfig@5.2.1\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac js-yaml@3.14.1\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 argparse@1.0.10\nRun Code Online (Sandbox Code Playgroud)\nembedded包要求argparse@1.0.10和embedded要求argparse@2.0.1。
对于这些,npm 将它们安装在多个位置:
\n\xe2\x9d\xaf ls node_modules/argparse\nCHANGELOG.md LICENSE README.md argparse.js lib package.json\n\n\xe2\x9d\xaf ls packages/components/argparse\nls: cannot access 'packages/components/argparse': No such file or directory\n\n\xe2\x9d\xaf ls packages/embedded/node_modules/argparse\nCHANGELOG.md LICENSE README.md index.js lib package.json\nRun Code Online (Sandbox Code Playgroud)\n如果有帮助的话,这是一个片段root/package.json:
{\n "name": "customer-ui",\n "version": "1.0.0",\n "workspaces": [\n "packages/*"\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n感谢@Stf_F 在上面的评论中回答这个问题。
\n| 归档时间: |
|
| 查看次数: |
1448 次 |
| 最近记录: |