不发布到npm而直接使用github上的库

5,260 阅读2分钟

最近用了一个开源项目的依赖,然后发现需求不太满足,需要添加上一些自己的需求,于是在github上fork了项目后并做了一些改动。这时候问题来了,本来是项目中是通过npm install --save-dev xxx来引用的,如何替换为自己改过后的版本?

解决思路:

方法一: 直接更换node_modules里面对应的依赖源码。

这种方法只能临时性解决问题,当重新npm install一下,改动后的源码将丢失,不能解决问题。

方法二: 去掉依赖,将源码拷出来放到项目中保存。

对于所引用的npm依赖不是很复杂的时候,直接将别人的代码拷到项目中变成项目的一部分,这种方法还是很推荐的,操作起来也简单,复制粘贴就行。

方法三: 注册npm账号发布自己的源。

这种做法相当于将别人的代码拷过来,然后变成了一个自己的开源项目。虽然操作也不算复杂,也能解决问题,但个人感觉怪怪的,不推荐。

方法四: 直接引用github上的项目(本文重点)。

我也是第一次知道还可以有这样的操作,在package.json中将对应的源改为github上的项目地址,就可以替换掉原来的npm源,而github一般都比较稳定,直接引用也不会有很大问题(除非自己以后作死把项目删掉了)。

举个栗子: 我项目中引用了一个叫remember-scroll的项目,package.json如下:

{
  ...
  "dependencies": {
    "remember-scroll": "^0.1.0",
  },
  "devDependencies": {
    ...
  }
}

然后我在github项目上fork了原项目并做了一些改动,然后可以通过git@github.com:fengxianqi/remember-scroll.git这个地址把项目clone到本地。于是可以在package.json中替换为github上的源,前缀上需要加上git+ssh//

{
  ...
  "dependencies": {
    "remember-scroll": "git+ssh://git@github.com:fengxianqi/remember-scroll.git",
  },
  "devDependencies": {
    ...
  }
}

最后重新npm install一下就可以了。

这里有个建议,就是最好给自己改过的这个项目加一个tag,然后引用项目具体的tag,这是为了防止以后你有对该github项目有了新的改动,不至于影响到业务。具体做法是在后面加上#tag,如:

{
  ...
  "dependencies": {
    "remember-scroll": "git+ssh://git@github.com:fengxianqi/remember-scroll.git#v0.1.1",
  },
  "devDependencies": {
    ...
  }
}

这种做法对一些不想发布到npm中去的项目来说,比如公司内部项目,或者个人使用的小项目,是非常可行的。