gpt4 book ai didi

npm - 本地项目的 `npm install` 出现意外行为

转载 作者:行者123 更新时间:2023-12-04 12:51:10 24 4
gpt4 key购买 nike

设想

  • 我正在使用 npm 5.8.0
  • 我有一个 ProjectAProjectB
  • ProjectBProjectA 的依赖项
  • 这两个项目都通过 Webpack 捆绑和运行(如果需要,我可以提供我的配置)。

  • 出于开发目的,我引用了 ProjectBProjectA的 package.json 通过 "projectB": "file:../projectB" .基本上我需要的唯一文件在 lib Webpack 的输出文件夹。

    问题

    如果我使用上述配置安装此依赖项,npm 将安装整个 ProjectB - 文件夹到 node_modules。它将包含所有内容 projectB的 node_modules、配置文件、src 文件夹等。

    除了这不是预期的行为之外,这还会导致错误。例如,一些已安装的@types 会抛出错误,因为它们被认为是重复的。 @types 和来自 ProjectA 的其他包和 ProjectB似乎“碰撞”。这些包被引用为 "dependencies"在这两个 ProjectAProjectB大多。

    我试过的

    npm 链接

    如果我使用 npm 链接,则会出现相同的(见上文)行为。整个文件夹将安装到 ProjectA的节点模块。

    npm 包

    可能是 重要 我确实有一个 .npmignore -文件在 ProjectB .所以当我使用 npm pack一个 projectB.tgz文件生成。如果我再安装 ProjectB通过 "projectB": "file:../projectB.tgz"一切正常。我假设 npm pack确实采取 .npmignore -文件考虑在内。

    我对这个解决方案的问题是,我不仅要构建 ProjectB每次对其应用更改时, npm pack它。

    删除 ProjectB的 node_modules

    我想这是最愚蠢的解决方法。如果我引用 ProjectB通过 "projectB": "file:../projectB"再次但在构建后删除它的 node_modules,它们在安装后不会出现。因此,我不再有任何异常(exception)。

    我想这也不是一个有效的解决方案,因为仍然是整个 ProjectB - 正在安装文件夹。

    问题

    这里的最佳做法是什么? ProjectA 的合理星座是什么?和 ProjectB为了安装 ProjectB从本地来源?

    最佳答案

    如果 projectA需要来自 projectB/lib 的文件, 你可以配置 webpack 的 resolver如下(假设 webpack 4):

    resolve {
    alias: "projectB": "projectB/lib"
    }

    如果 projectB是一个模块,它是 package.json应该包括相应的入口点(见 this page )。

    我还建议您尝试 yarn而不是用于包管理的 npm。纱的 workspaces功能设计用于处理多个相互依赖的包。

    关于npm - 本地项目的 `npm install` 出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49597204/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com