mac上使用cnpm搭建npm私有倉庫,並上傳/下載私有npm包


原文地址:https://www.cnblogs.com/yalong/p/12837461.html

前言

隨着Nodejs開發的項目越來越多,Node項目管理就成了一個需要思考的問題了。如果所有項目都開源統一用 NPM 進行管理也沒什么問題,但總有一些是我們不希望的完全開放的代碼,作為企業是核心秘密保留在公司內部,這個時候就需要在公司內網也搭建一套 NPM 依賴管理系統。
CNPM正好就提供了這個功能。
CNPM官方githuib地址, 但是官方文檔不夠全面:點我 。
大家可以下載我的這份, 我在官方項目基礎上進行了配置 點我, 具體配置下面會講。
官網上寫的是在linux環境下,其實在什么環境都可以,這里就講在mac下部署cnpm服務。

整個過程可以分為如下幾步:

1.下載cnpm項目代碼。

git clone https://github.com/YalongYan/private-cnpm
或者直接下載壓縮包。大家下載官方的git地址也可以,做相應的配置修改就可。

2.下載mysql & 導入數據表

mac下mysql的下載安裝參考 這里
這里先記下數據庫的用戶名,密碼,下面會用到。
安裝 MySql的可視化工具 MySqlWorkBench。
首次打開,MySqlWorkBench, 需要連接數據庫,如下,點擊加號, 下面的local是我之前連接好的,像這樣連接好的, 下次直接雙擊這個數據庫就可直接進入。

 

 

依次輸入信息,1的名字隨便寫, 2 3 分別是用戶名,密碼,填寫完,點擊4 測試是否能連接上,成功了點擊ok。

 

 

點擊如下按鈕,創建數據庫:

依次填入信息,最后Apply(這個test是數據庫名字)

然后就可以看到新增的數據庫了。

 

 

導入數據表:

 

 

選擇cnpm項目里,docs目錄下的db.sql
記得在最上面加上一行, use test;
test是剛才的數據庫名字。然后點擊左邊起第一個⚡️

 

 

這樣就導入成功了,如下:

3.修改cnpm里面對應的配置

修改config/index.js 里面的一些參數

database: {
    // 設置數據庫信息
    db: 'test',
    username: 'root',
    password: '123456',

    // the sql dialect of the database
    // - currently supported: 'mysql', 'sqlite', 'postgres', 'mariadb'
    dialect: 'mysql',

    // custom host; default: 127.0.0.1
    // host: '127.0.0.1',
    host: '0.0.0.0',// 用這個 是為了 用電腦ip訪問

    // custom port; default: 3306
    port: 3306,

    // use pooling in order to reduce db connection overload and to increase speed
    // currently only for mysql and postgresql (since v1.5.0)
    pool: {
      maxConnections: 10,
      minConnections: 0,
      maxIdleTime: 30000
    },

    dialectOptions: {
      // if your server run on full cpu load, please set trace to false
      trace: true,
    },

    // the storage engine for 'sqlite'
    // default store into ~/.cnpmjs.org/data.sqlite
    storage: path.join(dataDir, 'data.sqlite'),

    logging: !!process.env.SQL_DEBUG,
  },
  enablePrivate: true, // 只有管理員可以發布 npm 包,默認為 false,即任何人都可以發布包
  scopes: ['@company'], // 私有包必須依附於 scope 下, 這個compan可以是公司名字啥的,自己定義。
// default system admins
  admins: {
    // name/密碼: email,
   // 這里這個admin 既是用戶名, 也是密碼
    admin: 'admin@cnpmjs.org',
    dead_horse: 'dead_horse@qq.com',
  },
4.啟動cnpm項目

npm install & npm run start
訪問 http://127.0.0.1:7002/


訪問 http://127.0.0.1:7001/
返回的是一堆json 就成功了。
這里其實可以吧127.0.0.1 換成本機ip, 這樣在局域網內的其他電腦,可以直接通過ip訪問我們的服務。
5.發布npm包

我們需要先做兩件事
1.為了方便管理npm的源, 我們安裝 nrm

$ npm install nrm -g

  $ 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/

上面可以看出可以用的npm倉庫地址,*標明當前使用的倉庫地址,使用npm use 'name'切換倉庫
2.添加本地私有倉庫
cnpm提供兩個端口:7001和7002,其中7001用於NPM的注冊服務,7002用於Web訪問

  $ nrm add local http://127.0.0.1:7001/

    add registry local success

  $ 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/
  # local -- http://127.0.0.1:7001/

local就是我們剛才添加的本地私有npm倉庫,執行
nrm use local
使用本地倉庫

然后就可以正常使用了

npm login  // 輸入用戶名,密碼
npm publish 

對於如何發布npm包,可以參考我之前寫的這篇https://www.cnblogs.com/yalong/p/10388384.html
發布成功后 ,在7002頁面可以看到 total packages 增加了。

這里只能搜索,才能找到對應的npm包

 

 

6.下載npm包

這里下載就跟正常的下載是一樣的,
npm install @company/xxx-test
因為目前我們的npm源 還是local。
以后如果想下載公網的npm, 需要切換源
nrm use npm

期間遇到的問題:

出現下面這個問題, 是連不上數據庫

    code: 'ER_NOT_SUPPORTED_AUTH_MODE',
    errno: 1251,
    sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
    sqlState: '08004',
    fatal: true

解決辦法如下:
1.首先進入mysql命令行 mac下如何進入mysql命令行
2.然后執行如下代碼:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;

123456換成自己的數據庫密碼。 重啟node服務即可。
參考鏈接:

https://www.cnblogs.com/JimmyLuo/p/7079634.html

http://blog.fens.me/nodejs-cnpm-npm/

https://www.jianshu.com/p/4e7414f7fcc8

https://github.com/zhengyange/blog/blob/master/window-cnpmjs.md

https://www.jianshu.com/p/4e7414f7fcc8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM