用自己的实现替换npm包

Mon*_*nor 7 javascript npm yarnpkg

在我的package.json中,我有一个依赖项"protractor": "2.1.0".那个包又依赖于"jasminewd2": "0.0.5".

jasminewd2包有一些我想要修改的行为.我下载了它的源代码并进行了我需要的更改.Yarn的文档说明了使用本地源包的可能性:

yarn add file:/path/to/local/folder安装本地文件系统上的软件包.这对于测试未发布到注册表的其他您的包非常有用.

当我执行该命令时

  1. "jasminewd2": "file:\\CustomNodeModules\\jasminewd2"被添加到我的package.json中.
  2. 这到我的yarn.lock文件:

    "file:\\CustomNodeModules\\jasminewd2", jasminewd2@0.0.5:
      name jasminewd2
      version "0.0.5"
      resolved "https://registry.yarnpkg.com/jasminewd2
         /-/jasminewd2-0.0.5.tgz#528609a124dfc688c1e3f434a638e047066cd63e"
    
    Run Code Online (Sandbox Code Playgroud)

因此,node_modules/jasminewd2包含npm存储库中的原始版本.如何让纱线安装我的版本?

Nic*_*bal 6

我相信你的解决方案不起作用,因为它jasminewd2是一个传递依赖(protractor而不是直接依赖).因此,当您直接添加时,传递的不受影响.

您可以使用两种方法解决这个问题:

  1. 如果您的更改是临时的(用于开发或故障排除),您应该yarn link按照文档中的说明进行操作.
  2. 否则,你可以分叉protractorjasminewd2打包并在各自的package.jsons中引用它们.package.json语法"protractor": "<githubUser>/<githubRepo>".

根据我的经验,第二种方法有一个npm缓存形式的警告:HEAD只有在首次安装该依赖项时才会获取你的git repo .在那之后,它会被缓存并且每次都会重新安装 - 即使你的回购HEAD已经改变了.

这就是我通常将提交哈希作为依赖项的一部分引用的原因:"dependency": "user/repo.git#aef38fb2adc73304ae1ea87b0d607ad7fadc4d0g".我没有尝试过这个技巧yarn,但假设它的行为完全相同(通过lockfile设计).

  • 在这种情况下,我认为你唯一的选择是分叉`protractor`和`jasminewd2`包,并在相应的`package.json`中引用它们.如果你不熟悉,[这里是如何](https://docs.npmjs.com/files/package.json#dependencies):`"protractor":"<githubUser>/<githubRepo>"`. (3认同)