打造簡易的 NPM 私有倉庫

我們通常通過 npm 來安裝和使用開源的模塊。但是,通常我們有些私有的模塊,不想通過npm發(fā)布,但是又想在一些項(xiàng)目中共享使用,而且我們不想將公共模塊是復(fù)制到各個項(xiàng)目中來使用。而且一旦公有模塊更新,我們也不能及時更新。當(dāng)然,如果不嫌麻煩,可以用相對目錄,不過這種在開發(fā)代碼時,引用時,寫法上就要將相對目錄寫上。但是我們現(xiàn)在探討的是另一種方式——利用現(xiàn)有的git,既不用搭建私有的npm私有倉庫(npm private repository),又能滿足上面的需求,它做為一個快速解決方案, 后期是可以慢慢過渡升級到使用完整 npm 私有倉庫的解決方案的.

打造一個完整的 npm 私有倉庫, 需要服務(wù)器, 需要安裝環(huán)境。后面會有文章單獨(dú)介紹。

新建 npm 私有模塊

下面以一個實(shí)例來說明如何在 GitLab 中新建一個 npm 私有模塊, 假設(shè)我們要新建的私有模塊名為: wave-test

在 GitLab 上新建一個 project, 名字為: wave-test

對于公共模塊, 最好是放在同一個 group 下, 例如放在 wavesnows 這個 group 下. 那么以后所有公共模塊的 git 地址就可以統(tǒng)一為:

  http://git.your-inc.com/{group}/{project}.git

將項(xiàng)目 clone 下來

git clone http://git.your-inc.com/wavesnows/wave-test.git

添加 package.json 配置, 注意限定 @scope

 npm init --scope=wavesnows 

然后提交 push 上去

到這里私有模塊就已經(jīng)發(fā)布好了, 如果有項(xiàng)目要使用, 就配置下項(xiàng)目的 dependencies 即可.

使用私有模塊

添加私有模塊的依賴

在項(xiàng)目的 package.json 中添加依賴, 例如: 依賴 @wavesnows/wave-test 這個私有模塊

 "@wavesnows/wave-test": "git+http://git.your-inc.com/wavesnows/wave-test.git"

如果想固定依賴某個分支,可以加上分支的名字,比如分支branch1,

 "@wavesnows/wave-test": "git+http://git.your-inc.com/wavesnows/wave-test.git#branch1"

安裝私有模塊

跟安裝開源的模塊一樣, 使用 npm install 安裝依賴即可. 私有模塊會安裝在 @scope 的子文件夾中, 例如:

node_modules/@wavesnows/wave-test

代碼中使用私有模塊

  • 跟使用開源的模塊一樣, 我們只要寫對應(yīng)的包名即可. 私有模塊的包名只是帶有 @scope 而已.
var wave = require('@wavesnows/wave-test');

// 另外一種引用方式
import WT from '@wavesnows/wave-test'

  • 如果在使用webpack的項(xiàng)目中使用,我們還可以通過配置alias來簡化代碼中的寫法
alias: {
  'wave-test': '@wavesnows/wave-test'
}

在代碼中就可以和引用其他module一樣了

var wave = require('wave-test');

// 或者
import WT from 'wave-test'

如果alias中配置了

 '@': resolve('src')

我們在使用帶有scope的模塊的時候,如果不配置alias,@可能會造成沖突,這個和webpack的>ModuleAliasPlugin的實(shí)現(xiàn)有關(guān)。

'@': resolve('src'),
'wave-test': resolve('node_modules/@waevsnows/wave-test'),
// 或者
'wave-test': '@wavesnows/wave-test',

更新私有模塊

如果私有模塊的版本更新了, 我們使用 npm update 是無法更新私有模塊的, 只能通過

npm install @wavesnows/wave-test

這樣的方式來重新安裝一次私有模塊, 才能獲取到最新版本的私有模塊.

私有模塊的規(guī)范

  • package.json#name 必須限定 @scope

@scope 一般為 GitLab group 的名字, 例如 @companyfe, 那么 name 為: @wavesnows/wave-test

  • package.json#private 設(shè)置為 true

    防止你一不小心將私有模塊發(fā)布上去

{
  "name": "@wavesnow/wave-test",
  "version": "0.0.1",
  "description": "Wave Tools",
  "main": "index.js",
  "private": "true",
  "repository": {
    "type": "git",
    "url": "http://git.your-inc.com/wavesnow/wave-test.git"
  },
  "keywords": [
    "wave",
    "git",
    "tool",
    "javescript"
  ],
  "author": "wavesnow",
  "license": "MIT"
}

參考

you can specify private git repositories urls as a dependency in your package.json files.

Private npm modules

All private packages are scoped. If a package's name begins with @, then it is a scoped package. The scope is everything in between the @ and the slash.

When used in package names, scopes are preceded by an @ symbol and followed by a slash. Scopes are a way of grouping related packages together.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 描述 npm從以下來源獲取配置值,按優(yōu)先級排序: 命令行標(biāo)記 在命令行上放置--foo bar設(shè)置foo配置參數(shù)為...
    竹天亮閱讀 44,521評論 0 8
  • npm是什么 NPM的全稱是Node Package Manager,是隨同NodeJS一起安裝的包管理和分發(fā)工具...
    build1024閱讀 8,156評論 0 9
  • Node.js使得在服務(wù)器端使用JavaScript編寫應(yīng)用程序成為可能。它是基于V8Javascript運(yùn)行時并...
    間陽幕賓閱讀 1,689評論 0 5
  • 什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey閱讀 6,370評論 2 36

友情鏈接更多精彩內(nèi)容