用sinopia搭建npm私服

来源:http://www.cnblogs.com/LittleSix/archive/2016/11/11/6053549.html
-Advertisement-
Play Games

公司對於搭建本地私有npm庫有如下要求: 私有包托管在內部伺服器中 項目中使用了公共倉庫上的公共包,也使用了內部伺服器上的私有包 希望下載的時候,公共包走公共倉庫,私有包走內部伺服器的私有倉庫 伺服器硬碟有限,希望只緩存下載過的包,而不是全部同步。 ... ...


 

需求(這段話是摘抄參考文檔的,因為作者也想這麼說):

       公司出於自身隱私保護需要,不想把自己的代碼開源到包管理區,但是又急需一套完整包管工具,來管理越來越多的組件、模塊和項目。對於前端,最熟悉的莫過於npm,bower等;但是bower的市場相容性明顯沒有npm強壯,加之commonjs規範的日益成熟。npm應該是前端包管理的不二選擇。

公司對於搭建本地私有npm庫有如下要求:

  1. 私有包托管在內部伺服器中

  2. 項目中使用了公共倉庫上的公共包,也使用了內部伺服器上的私有包

  3. 希望下載的時候,公共包走公共倉庫,私有包走內部伺服器的私有倉庫

  4. 伺服器硬碟有限,希望只緩存下載過的包,而不是全部同步。

  5. 對於下載,發佈npm包有對應的許可權管理,安裝方便,配置簡單,依賴少。

Sinopia 是一個零配置的私有的帶緩存功能的npm包管理工具。

1.要安裝的軟體

軟體簡介

nodejs/npm 軟體名稱: node-v6.9.1-linux-x64.tar.gz   下載地址:https://npm.taobao.org/mirrors/node/v6.9.1/

安裝命令:

tar -xvf node-v6.9.1-linux-x64.tar.gz
sinopia    版本:1.4.0 安裝命令: 
npm install -g sinopia  

pm2   版本:2.1.4  安裝命令

 npm install -g  pm2  

nrm   版本:1.0.0  安裝命令

npm install -g nrm  

規劃目錄(下為本次安裝的實際目錄,可根據實際環境調整)

目錄 賬戶 備註
npm、nodejs解壓目錄 /opt/software nadmin

 

sinopia啟動時目錄 /home/nadmin nadmin

 

sinopia的passwd路徑 /home/nadmin/node_htpasswd nadmin  
sinopia的storage路徑 /home/nadmin/sinopia/storage nadmin 建議磁碟空間較大不推薦放在home目錄

2.具體安裝步驟(Server端)

創建賬戶nadmin

$ useradd nadmin

安裝node和npm

安裝步驟1的目錄和命令,解壓軟體 node-v6.9.1-linux-x64.tar.gz

(註:npm會在安裝node的時候一起安裝)

$ tar -xvf node-v6.9.1-linux-x64.tar.gz

添加node_home到環境變數,用root賬戶修改/etc/profile

$vim /etc/profile          #追加
NODE_HOME=/opt/software/node-v6.9.1-linux-x64
PATH=$PATH:$NODE_HOME/bin

source 使配置生效

$ source /etc/profile

配置生效之後,在任意地方可查看版本如下:

1 $ node -v
2 v6.9.1
3 $ npm -v
4 3.10.8  

配置npm

先查看npm的配置文件地址

$npm config get userconfig
/home/nadmin/.npmrc

修改此配置文件,修改後查看,內容如下

$ cat /home/nadmin/.npmrc
proxy=http://網路代理ip:8080/
https-proxy=http://網路代理ip:8080/
no_proxy=本地yum源ip
registry=https://registry.npm.taobao.org/

也可通過命令設置http網路代理地址和npm server的地址,如下:

$ npm config set proxy http://server:port

$ npm config set https-proxy http://server:port

$ npm config set registry "http://registry.npmjs.org/"

~~由於上步驟npm已經安裝配置完畢,所以下麵的安裝軟體可以通過npm命令進行~~

安裝sinopia

$npm install -g sinopia

配置sinopia

Sinopia的特點是,你在哪個目錄運行,它的就會在對應的目錄下創建自己的文件。目錄下預設有兩個文件:config.yaml和storage,htpasswd 是添加用戶之後自動創建的

由於每次啟動預設的config.xml文件是從原始文件default.yaml拷貝而來,可先修改sinopia原始的default.yaml

地址:sinopia安裝目錄/conf/ default.yaml

查看

$ pwd
/opt/software/node-v6.9.1-linux-x64/lib/node_modules/sinopia/conf
$ ll
total 12
-rw-rw-r-- 1 nadmin nadmin 1309 Nov 9 19:52 default.yaml
-rw-rw-r-- 1 nadmin nadmin 4076 Jun 7 2015 full.yaml
-rw-rw-r-- 1 nadmin nadmin   39 Jun 7 2015 README.md

修改完畢,內如下:

storage: ./storage
auth:
htpasswd:
   file: /home/nadmin/node_htpasswd
uplinks:
npmjs:
   url: http://registry.npm.taobao.org/
packages:
'@*/*':
   access: $all
   publish: $authenticated
'*':
   access: $all
   publish: $authenticated
   proxy: npmjs
logs:
- {type: stdout, format: pretty, level: http}
listen: 0.0.0.0:4873
http_proxy: http://代理伺服器ip:8080
https_proxy: http://代理伺服器ip:8080

啟動 sinopia

在規劃好的啟動目錄下執行命令sinopia

$ pwd
/home/nadmin
$ sinopia
warn --- config file - /home/nadmin/sinopia/config.yaml
warn --- http address - http://0.0.0.0:4873/
http --> 200, req: 'GET http://registry.npm.taobao.org/express', bytes: 0/578356
http <-- 200, user: admin, req: 'GET /express', bytes: 0/34448
http --> 200, req: 'GET http://registry.npm.taobao.org/type-is', bytes: 0/54083

sinopia已經啟動,可正常使用,此種方法日誌會輸出到控制台,不建議使用,後面會介紹使用pm2對sinopia進程進行托管啟動的方法。

訪問http://ServerS::4873 查看頁面,看到如下頁面,說明sinopia安裝成功!

安裝pm2

$npm install -g pm2

使用pm2啟動sinopia

$ pm2 start sinopia
[PM2] Applying action restartProcessId on app [sinopia](ids: 0)
[PM2] [sinopia](0) ✓
[PM2] Process successfully started

使用pm2托管的進程可以保證進程永遠是活著的,嘗試通過kill -9去殺sinopia的進程發現殺了之後又自動啟起來。推薦使用此種方式啟動sinopia.

安裝nrm

nrm是 npm registry 管理工具, 能夠查看和切換當前使用的registry。不安裝也可以。

$npm install -g nrm
 
$ nrm ls
  npm ---- https://registry.npmjs.org/
  cnpm --- http://r.cnpmjs.org/
* taobao - https://registry.npm.taobao.org/
  nj ----- https://registry.nodejitsu.com/
  rednpm - http://registry.mirror.cqupt.edu.cn/
  npmMirror  https://skimdb.npmjs.com/registry/
  edunpm - http://registry.enpmjs.org/
  mytestnpm  http://ServerS:4873/  

使用命令

$ nrm add XXXXX http://XXXXXX:4873 # 添加本地的npm鏡像地址

$ nrm use XXXX # 使用本址的鏡像地址

3.驗證

在客戶端ServerC假設使用者已經安裝npm/nrm並且已經正確配置

1>npm install

現在驗證使用剛剛搭建好的sinopia npm庫(http://serverS:4873/)進行安裝軟體和發佈軟體

修改npm的訪問代理為剛剛搭建好的http://serverS:4873/

# cat .npmrc
registry=http://serverS:4873/

執行安裝express的命令

$npm install express  

安裝成功!

2>npm publish

本地如果有可用來發佈的模塊可以直接用,本地沒有,使用npm init根據提示創建一個。

初始化創建一個模塊

$npm init  

如果需要登錄才能publish則登錄

運行npm adduser註冊賬號,如果已經有賬號直接運行 npm login

登錄成功時可通過npm whoami查看

執行發佈

# npm publish chenyu/
+ chenyu@1.0.0

去serverS查看剛剛publish的模塊:成功!

 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、WebStorm快捷鍵: Ctrl+Alt+(向下方向鍵):快速複製當前行 Alt+(向上/下方向鍵):移動當前行 Ctrl+D:刪除當前行 Ctrl+/:快速(取消)註釋當前行 Ctrl+Alt+L:格式化當前文檔2、HTML5九大新特性: ①表單新特性、②視頻音頻、③Canvas繪圖、④SV ...
  • 模塊化是指在解決某一個複雜問題或者一系列的雜糅問題時,依照一種分類的思維把問題進行系統性的分解以之處理。模塊化是一種處理複雜系統分解為代碼結構更合理,可維護性更高的可管理的模塊的方式。可以想象一個巨大的系統代碼,被整合優化分割成邏輯性很強的模塊時,對於軟體是一種何等意義的存在。對於軟體行業來說:解耦... ...
  • [1]創建 [2]發送請求 [3]接收響應 [4]非同步 [5]實例 ...
  • 有時候我們在網頁上需要增加一個下載按鈕,讓用戶能夠點擊後下載頁面上的資料,那麼怎樣才能實現功能呢? ...
  • 首先,介紹下$filter服務: 1、$filter是用來進行數據格式化的專用服務; 2、AngularJS內置了currency、date、filter、json、limitTo、lowercase、uppercase、number、orderBy這8個filter; 3、filter可以嵌套使用 ...
  • 當一個HTML元素需要添加mouseon、mouseout與click事件,或者mouserenter、mouseleave和click事件時,click事件無法觸發 針對上述問題,我遇到的有兩種情況: 情況一:已經存在的HTML元素綁定事件,可以使用下麵這種綁定方式 情況二:未來存在的要素綁定事件 ...
  • 最近在寫一個時間判斷腳本,需要將固定好的字元串時間轉換為時間戳進行比較,在做的時候個人習慣使用chrome作為調試工具, 代碼基本完成之後,一切正常; 使用其他瀏覽器訪問,好嘛,IE跟safari都不相容,返回錯誤"Invalid Date"。 想著估計是字元串格式的問題,改成'2016/11/11 ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...