【问题标题】:npm 5 install folder without using symlinknpm 5 安装文件夹而不使用符号链接
【发布时间】:2017-11-21 07:40:51
【问题描述】:

在发布我的节点库之前,我可以使用advice the npm documentation wrote about

要测试本地安装,请进入其他文件夹,然后执行以下操作:

cd ../some-other-folder

npm install ../my-package

在 npm 版本 5 之前,我没有任何问题,因为它产生了我所期望的,即一个包含我将发布的输出的文件夹。

但是,使用 npm 5,它现在会创建一个指向我的本地项目的符号链接,如 npm 文档中所述:

npm 安装:

将目录中的包作为符号链接安装在当前目录中 项目。它的依赖项将在链接之前安装。如果 位于项目的根目录中,它的依赖项可能是 提升到顶层 node_modules 就像其他类型的 依赖关系。

如何使用“旧”方式安装本地项目?或者有没有一种新方法可以检查我的库是否正确?

谢谢。

【问题讨论】:

  • 你可以使用https://www.npmjs.com/package/install-local npm 模块。
  • 非常感谢@HardikModha :)
  • 我尝试使用 install-local,但它也会创建符号链接,因此 @HardikModha 的解决方案不能 100% 工作。它还具有不安装本地依赖项的依赖项的不良副作用。

标签: npm


【解决方案1】:

使用npm pack + npm install(根据install-local 包的建议)

npm pack <path-to-local-package>
npm install <package-version.tgz>

这将有效地将您的本地包复制到 node_modules。 请注意,这将仅打包生产相关文件(在您的 package.json 的 files 部分中列出的文件)。因此,您可以将其安装在包自己目录下的测试应用程序中。像这样的:

my-package
  package.json
  test
    test-app
      package.json
      node_modules
        my-package

假设 test 目录不包含在 my-package/package.json 中的 files 中。

这与 npm 5 及更早版本的工作方式相同。

【讨论】:

  • 有更好的方法吗?在我的设置中,我的仓库中的所有软件包都处于同一级别。我通过在 mainpackage 目录中执行 npm install --save ../otherpackage 来指定依赖关系。在它只是将 ../otherpackage 复制到 mainpackage/node_modules/otherpackage 之前,现在它在该位置创建了一个指向 ../../otherpackage 的符号链接。我的问题是,当 mainpackage/node_modules 中有符号链接时,它会炸毁 nodemon 并出现 ENOSPC 错误。必须使用 pack 创建一个包,然后 npm install tgz 文件会导致自动部署出现问题。
  • 刚试过这个,它不起作用,因为 otherpackage 对 ../yetanotherpackage 有本地依赖。我收到错误消息“无法从“yetanotherpackage”安装,因为它不包含 package.json 文件。”
【解决方案2】:

我编写了 npm-install-offline,它允许您从本地存储库或文件夹安装 npm 包。默认情况下,它会在安装时复制文件夹,但您也可以选择符号链接。 https://www.npmjs.com/package/npm-install-offline

npx npm-install-offline ../some-package

或者

npx npm-install-offline my-npm-package --repo ./my-offline-npm

它还会安装 npm 对本地包不做的包依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多