## 前言
基于前面的了解或者公司內部的剛需,可能搭建cnpm倉庫已經變成了你必須會的知識點。跟著我一起去服務器部署一個私有的cnpm倉庫吧。
### 環境要求
* 系統要求:mac或者linux(服務器基本都是linux的)
* nodejs:4.2.3 以上版本
### 基本安裝
* nodejs
~~~
curl -sL https://rpm.nodesource.com/setup_7.x | bash - (腳本)
yum install -y nodejs
yum install -y gcc-c++ make
~~~
* mysql
~~~
rpm -qa | grep mariadb
rpm -e --nodeps mariadb/mysql
sudo yum -y install mariadb-server
systemctl start mariadb.service
mysqladmin -u root password ‘passwd’
yum install git
git clone git://github.com/fengmk2/cnpmjs.org.git $HOME/cnpmjs.org
cd cnpmjs.org
Mysql -u root -p
create database cnpmjs;
use cnpmjs;
~~~
source docs/db.sql【db.sql位于cnpmjs.org/docs/db.sql】
vim config/index.js
### 使用須知
* cnpm提供兩個端口:7001和7002,其中7001用于NPM的注冊服務,7002用于Web訪問。
* bindingHost為安裝cnpm的服務器ip地址,也就是在瀏覽器中只能通過訪問http://192.168.0.234來訪問cnpm以及獲取npm的注冊服務。
修改本地下載地址(registryHost:r.cnpmjs.org修改為192.168.0.129:7001)
* 安裝依賴
持久使用
npm config set registry https://registry.npm.taobao.org
// 配置后可通過下面方式來驗證是否成功
npm config get registry// 或
npm info express
進入./cnpmjs.org,執行npm install
* 啟動服務
node dispatch.js或者“nohup node dispatch.js &”來啟動。
其中nohup為在后臺啟動。
?npm run dev:調試模式啟動;
?npm run test:跑測試;
?npm run start:啟動 CNPM;
?npm run status:查看 CNPM 啟動狀態;
?npm run stop:停止 CNPM。
* 測試是否啟動成功
在瀏覽器中輸入:http://192.168.0.234:7002/,如果出現:
發布私有包
npm config set registry https://registry.npm.taobao.org
安裝cnpm客戶端
curl -sL https://rpm.nodesource.com/setup_7.x | bash - (腳本)
yum install -y nodejs
sudo npm install cnpm -g
更改默認的registry,指向私有的registry
cnpm set registry http://192.168.0.234:7001
* 用npm賬號登錄你的私有registry
這里的賬號中www.npmjs.com的賬號,沒有請注冊(admin登錄)
~~~
$ cnpm login
Username: admin
Password: npm0816@zjkj.com
Email: (this IS public) admin@cnpmjs.org
~~~
### 創建私有測試包
* 生成測試包
~~~
$ cd /tmp
$ mkdir helloworld && cd helloworld
$ cnpm init
name: @cjt/helloworld
version: 1.0.0
~~~
* 生成package.json(產出文件) :
~~~
{
"name": "@cjt/helloworld",
"version": "1.0.0",
"description": "my first scoped package",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
~~~
* 注意事項
1. 注意,包名helloworld前必須要以公司名@cjt為前綴, @cjt在 config/index.js的scopes中配置
+
// registry scopes, if don't set, means do not support scopes
scopes: [ '@cjt','@cnpm', '@cnpmtest', '@cnpm-test' ],
2. 其余賬號權限分配必須二次開發,修改 `middleware/publishable.js`
3. 發布與同步(見cnpm入門)
發布
cnpm publish
通過瀏覽器訪問:http://192.168.0.129:7002/?可查看和操作私有CNPM服務器
從默認源同步gulp
cnpm sync gulp
下載
cnpm install gulp
4. 配置文件設置
?enableCluster:是否啟用?cluster-worker?模式啟動服務,默認?false,生產環節推薦為?true; 利用多核
?registryPort:API 專用的 registry 服務端口,默認?7001;
?webPort:Web 服務端口,默認?7002;
?bindingHost:監聽綁定的 Host,默認為?127.0.0.1,如果外面架了一層本地的?Nginx?反向代理或者?Apache?反向代理的話推薦不用改;
?sessionSecret:session?用的鹽;
?logdir:日志目錄;
?uploadDir:臨時上傳文件目錄;
?viewCache:視圖模板緩存是否開啟,默認為?false;
?enableCompress:是否開啟?gzip?壓縮,默認為?false;
?admins:管理員們,這是一個?JSON Object,對應各鍵名為各管理員的用戶名,鍵值為其郵箱,默認為?{ fengmk2: 'fengmk2@gmail.com', admin: 'admin@cnpmjs.org', dead_horse: 'dead_horse@qq.com' };
?logoURL:Logo?地址,不過對于我這個已經把 CNPM 前端改得面目全非的人來說已經忽略了這個配置了;
?adBanner:廣告 Banner 的地址;
?customReadmeFile:實際上我們看到的?cnpmjs.org?首頁中間一大堆冗長的介紹是一個 Markdown 文件轉化而成的,你可以設置該項來自行替換這個文件;
?customFooter:自定義頁腳模板;
?npmClientName:默認為?cnpm,如果你有自己開發或者 fork 的 npm 客戶端的話請改成自己的 CLI 命令,這個應該會在一些頁面的說明處替換成你所寫的;
?backupFilePrefix:備份目錄;
?database:數據庫相關配置,為一個對象,默認如果不配置將會是一個?~/.cnpmjs.org/data.sqlite?的 SQLite;
odb:數據的庫名;
ousername:數據庫用戶名;
opassword:數據庫密碼;
odialect:數據庫適配器,可選?"mysql"、"sqlite"、"postgres"、"mariadb",默認為?"sqlite";
ohost:數據庫地址;
oport:數據庫端口;
opool:數據庫連接池相關配置,為一個對象;
omaxConnections:最大連接數,默認為?10;
ominConnections:最小連接數,默認為?0;
omaxIdleTime:單條鏈接最大空閑時間,默認為?30000?毫秒;
ostorege:僅對 SQLite 配置有效,數據庫地址,默認為?~/.cnpmjs/data.sqlite;
?nfs:包文件系統處理對象,為一個 Node.js 對象,默認是?fs-cnpm?這個包,并且配置在?~/.cnpmjs/nfs?目錄下,也就是說默認所有同步的包都會被放在這個目錄下;開發者可以使用別的一些文件系統插件(如上傳到又拍云等),又或者自己去按接口開發一個邏輯層,這些都是后話了;
?registryHost:默認為?r.cnpmjs.org;
?enablePrivate:是否開啟私有模式,默認為?false;
o如果是私有模式則只有管理員能發布包,其它人只能從源站同步包;
o如果是非私有模式則所有登錄用戶都能發布包;
?scopes:非管理員發布包的時候只能用以?scopes?里面列舉的命名空間為前綴來發布,如果沒設置則無法發布,也就是說這是一個必填項,默認為?[ '@cnpm', '@cnpmtest', '@cnpm-test' ],據蘇千大大解釋是為了便于管理以及讓公司的員工自覺按需發布;更多關于 NPM scope 的說明請參見?npm-scope;
?privatePackages:就如該配置項的注釋所述,出于歷史包袱的原因,有些已經存在的私有包(可能之前是用 Git 的方式安裝的)并沒有以命名空間的形式來命名,而這種包本來是無法上傳到 CNPM 的,這個配置項數組就是用來加這些例外白名單的,默認為一個空數組;
?sourceNpmRegistry:更新源 NPM 的 registry 地址,默認為?https://registry.npm.taobao.org;
?sourceNpmRegistryIsCNpm:源 registry 是否為 CNPM,默認為?true,如果你使用的源是官方 NPM 源,請將其設為?false;
?syncByInstall:如果安裝包的時候發現包不存在,則嘗試從更新源同步,默認為?true;
?syncModel:更新模式(不過我覺得是個?typo),有下面幾種模式可以選擇,默認為?"none";
o"none":永不同步,只管理私有用戶上傳的包,其它源包會直接從源站獲取;
o"exist":定時同步已經存在于數據庫的包;
o"all":定時同步所有源站的包;
?syncInterval:同步間隔,默認為?"10m"?即十分鐘;
?syncDevDependencies:是否同步每個包里面的?devDependencies?包們,默認為?false;
?badgeSubject:包的?badge?顯示的名字,默認為?cnpm;
?userService:用戶驗證接口,默認為?null,即無用戶相關功能也就是無法有用戶去上傳包,該部分需要自己實現接口功能并配置,如與公司的?Gitlab?相對接,這也是后話了;
?alwaysAuth:是否始終需要用戶驗證,即便是?$ cnpm install?等命令;
?httpProxy:代理地址設置,用于你在墻內源站在墻外的情況。
- 前端工程化
- 前端工程化技術棧
- 前端工程化說明
- 工程化實踐
- npm教程
- npm入門
- cnpm入門
- cnpm搭建
- nodejs教程
- nodejs入門
- 快速入門
- 命令行工具
- 內存泄露
- 代碼的組織與部署
- 文件操作
- 網絡操作
- 進程管理
- 異步編程
- express教程
- orm模塊
- nodejs實踐
- 項目搭建
- 異步優化
- 創建web和tcp服務器
- 終端問答程序
- 爬蟲系統
- mongleDb
- gulp教程
- gulp入門
- gulp常用插件(1)
- gulp常用插件(2)
- gulp創建目錄
- webpack教程
- webpack入門
- vuejs教程
- vuejs入門系列
- vue-cli入門
- angularjs教程
- angularjs入門系列
- reactjs教程
- reactjs入門系列
- bower教程
- bower入門
- echarts教程
- swiper教程
- web
- web優化
- http優化1
- http優化2
- http優化3
- 其他