在window上測(cè)試安裝cnpm私有倉(cāng)庫(kù)

在window上測(cè)試安裝cnpm私有倉(cāng)庫(kù)

官方說明只能在linux和mac安裝

1. clone到本地,安裝dependencies

  # from git
  $ git clone https://github.com/cnpm/cnpmjs.org.git
  # 因?yàn)槭窃趙indow上安裝,所有官方文檔上的一些命令就不能使用了,
  $ cd cnpmjs.org
  $ npm install
  $ npm run dev

上面的最后一條命令執(zhí)行肯定是會(huì)報(bào)錯(cuò)的,下面我們就按著報(bào)錯(cuò)提示,一個(gè)一個(gè)的解決
最終搭建自己完美的私有npm倉(cāng)庫(kù)

2. npm run dev報(bào)錯(cuò)

  D:\www\cnpmjs.org [master ≡ +0 ~1 -0 !]
  λ npm run dev

  > cnpmjs.org@3.0.0-alpha.16 dev D:\www\cnpmjs.org
  > DEBUG=cnpm* node dispatch.js

  'DEBUG' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序
  或批處理文件。

  npm ERR! Windows_NT 10.0.14393
  npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "dev" npm ERR! node v6.10.0
  npm ERR! npm  v3.10.10
  npm ERR! code ELIFECYCLE
  npm ERR! cnpmjs.org@3.0.0-alpha.16 dev: `DEBUG=cnpm* node dispatch.js`
  npm ERR! Exit status 1

此命令錯(cuò)誤主要是window不能執(zhí)行DEBUG=cnpm*命令,所以我們要改這條命令
更新package.json中命令如下,主要看dev命令

{
  "scripts": {
    "dev": "set DEBUG=cnpm* & node dispatch.js",
    "test": "make jshint && make test",
    "test-local": "make test",
    "start": "./bin/nodejsctl start && cp History.md docs/web/history.md",
    "status": "./bin/nodejsctl status",
    "stop": "./bin/nodejsctl stop"
  }
}

再次執(zhí)行npm run dev命令,已經(jīng)不錯(cuò)了

  D:\www\cnpmjs.org [master ≡ +0 ~2 -0 !]
  λ npm run dev

  > cnpmjs.org@3.0.0-alpha.16 dev D:\www\cnpmjs.org
  > set DEBUG=cnpm* & node dispatch.js

  Starting cnpmjs.org ...
  cluster: false
  admins: {"fengmk2":"fengmk2@gmail.com","admin":"admin@cnpmjs.org","dead_horse":"dead_horse@qq.com"}
  scopes: ["@cnpm","@cnpmtest","@cnpm-test"]
  sourceNpmRegistry: https://registry.npm.taobao.org
  syncModel: none
  [Wed Jan 24 2018 14:52:05 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)] [worker:34728] Server started, registry server listen at 127.0.0.1:7001, web
  listen at 127.0.0.1:7002, cluster: false

3. 我們根據(jù)提示訪問127.0.0.1:7002,不用說又要報(bào)錯(cuò)了,但是頁(yè)面應(yīng)該是能訪問的了

  cnpmjs.org:middleware:auth GET / with "" +0ms
  cnpmjs.org:middleware:auth GET /total with "" +416ms
{ SequelizeDatabaseError: SQLITE_ERROR: no such table: module
    at Query.formatError (D:\www\cnpmjs.org\node_modules\sequelize\lib\dialects\sqlite\query.js:348:14)
    at afterExecute (D:\www\cnpmjs.org\node_modules\sequelize\lib\dialects\sqlite\query.js:112:29)
    at replacement (D:\www\cnpmjs.org\node_modules\sqlite3\lib\trace.js:19:31)
    at Statement.errBack (D:\www\cnpmjs.org\node_modules\sqlite3\lib\sqlite3.js:16:21)
  name: 'SequelizeDatabaseError',
  message: 'SQLITE_ERROR: no such table: module',
  parent:
   { Error: SQLITE_ERROR: no such table: module
       at Error (native)
     errno: 1,
     code: 'SQLITE_ERROR',
     sql: 'SELECT count(name) AS count FROM module;' },
  original:
   { Error: SQLITE_ERROR: no such table: module
       at Error (native)
     errno: 1,
     code: 'SQLITE_ERROR',
     sql: 'SELECT count(name) AS count FROM module;' },
  sql: 'SELECT count(name) AS count FROM module;',
  url: '/total' }
SequelizeDatabaseError: SQLITE_ERROR: no such table: module
    at Query.formatError (D:\www\cnpmjs.org\node_modules\sequelize\lib\dialects\sqlite\query.js:348:14)
    at afterExecute (D:\www\cnpmjs.org\node_modules\sequelize\lib\dialects\sqlite\query.js:112:29)
    at replacement (D:\www\cnpmjs.org\node_modules\sqlite3\lib\trace.js:19:31)
    at Statement.errBack (D:\www\cnpmjs.org\node_modules\sqlite3\lib\sqlite3.js:16:21)

這些錯(cuò)誤的意思簡(jiǎn)單說就是沒有database,沒有table,什么都沒有,怎么辦
// - currently supported: 'mysql', 'sqlite', 'postgres', 'mariadb'
這是cnpmjs支持的數(shù)據(jù)庫(kù)列表,默認(rèn)使用sqlite,我準(zhǔn)備使用mysql,所以安裝mysql請(qǐng)百度

4. 因?yàn)槲覀兪窃趙indow上跑這個(gè)項(xiàng)目,所以一些自動(dòng)化命令我們就不能使用了

我們要手動(dòng)執(zhí)行sql語句,創(chuàng)建數(shù)據(jù)表,sql語句在./docs/db.sql
為方便,使用navicat客戶端工具(自己安裝)

4.1 連接mysql

mysql_connect.png

4.2 創(chuàng)建數(shù)據(jù)庫(kù)cnpmjs(名字隨便)

在mysql連接名字上比如local,右鍵->新建數(shù)據(jù)庫(kù)

database.png

4.3 執(zhí)行sql

在數(shù)據(jù)庫(kù)cnpmjs名字上右鍵->命令行界面,將./docs/db.sql中的sql語句進(jìn)行copy,
粘貼到命令,回車執(zhí)行ok。
特別注意有個(gè)./docs/user.sql,必須單獨(dú)執(zhí)行一下

sql.png

4.4 修改配置文件config/index.js

主要配置db, username, password, dialect, host, port

  /**
   * database config
   */

  database: {
    db: 'cnpmjs',
    username: 'root',
    password: 'root',

    // 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',

    // 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
    },

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

    logging: !!process.env.SQL_DEBUG,
  },

5. 重新啟動(dòng)項(xiàng)目npm run dev,現(xiàn)在應(yīng)該一切正常了

index.png

7001驗(yàn)證

7001.png

6. 現(xiàn)在到了我們?cè)趺词褂盟接袔?kù)的時(shí)候了

6.1 我們使用nrm這個(gè)模塊進(jìn)行npm庫(kù)的管理

  #
  $ 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倉(cāng)庫(kù)地址,*標(biāo)明當(dāng)前使用的倉(cāng)庫(kù)地址,使用npm use 'name'切換倉(cāng)庫(kù)

6.2 添加本地私有倉(cāng)庫(kù)

cnpm提供兩個(gè)端口:7001和7002,其中7001用于NPM的注冊(cè)服務(wù),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倉(cāng)庫(kù),執(zhí)行

  nrm use local
  # 使用本地倉(cāng)庫(kù)

6.3 發(fā)布npm包

在發(fā)布 npm 包之前,需要先將原先的 config/config.js 中添加一些配置屬性:

  enablePrivate: true, // 只有管理員可以發(fā)布 npm 包,默認(rèn)為 false,即任何人都可以發(fā)布包
  admins: {
    admin: 'admin@admin.com' // 管理員權(quán)限
  },
  scopes: ['@company'], // 私有包必須依附于 scope 下

登錄我們配置的管理員

  # 使用本地倉(cāng)庫(kù)
  nrm use local
   Registry has been set to: http://127.0.0.1:7001/
  # 執(zhí)行登錄
  npm login
  Username: admin     # 輸入用戶名
  Password:           # 密碼admin
  Email: (this IS public) admin@admin.com     # 郵箱就是配置的郵箱
    Logged in as admin on http://127.0.0.1:7001/.

我們知道,要發(fā)布包到npm,需要有g(shù)ithub倉(cāng)庫(kù)地址,現(xiàn)在我們就在github上建個(gè)demo作測(cè)試
實(shí)際使用應(yīng)該使用公司內(nèi)部的gitlab

我們直接使用已有的demo

  git clone git@github.com:twolun/xxx-utils.git
  cd xxx-utils
  npm publish
    + @evcard/evcard-utils@1.0.2
    # 應(yīng)該是發(fā)布成功

1.下面我們?cè)趥}(cāng)庫(kù)中查看,已經(jīng)有了一個(gè)包了

ready.png

2.這上面只有通過搜索才能查看到發(fā)布的包

search.png

3.進(jìn)一步查看,注意我畫紅線的部分,是在config/index.js里配置的

detail.png

4.最后一點(diǎn)要注意,就是我們發(fā)布包的package.json文件里有包名的寫法
尤其注意name的寫法@company也是固定的,與config/index.js里的配置相對(duì)應(yīng)

{
  "name": "@company/xxx-utils",
  "version": "1.0.3",
  "description": "私有包測(cè)試demo",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "admin@admin.com",
  "license": "ISC"
}

6.4 安裝本地倉(cāng)庫(kù)剛剛發(fā)布的xxx-utils

  D:\github\fis3-parser-html-plugin1
  npm install @company/xxx-utils -S
  fis3-parser-html-plugin@1.0.0 D:\github\fis3-parser-html-plugin1
    `-- @company/xxx-utils@1.0.3

  npm WARN fis3-parser-html-plugin@1.0.0 No repository field.

到此安裝成功,應(yīng)該可以使用了

總結(jié)

  1. 全程window環(huán)境,相信在mac, linux環(huán)境肯定也沒問題的
  2. sql語句手動(dòng)執(zhí)行,創(chuàng)建database和table
  3. 更改相關(guān)配置一切搞定
  4. 全程沒有使用cnpm這個(gè),使用更方便nrm來切換倉(cāng)庫(kù)池
  5. 更多詳細(xì)配置請(qǐng)查看cnpmjs.org官方文檔

詳細(xì)文檔地址

完整demo地址
xxx-utils地址

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

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,285評(píng)論 6 342
  • 第一章 安裝Git工具 下載GitHub for Windows,直接點(diǎn)擊安裝,安裝完成后,可以看到“Git Sh...
    不圓的石頭閱讀 12,152評(píng)論 5 63
  • 上了 下了 下了 上了 沒有情的干擾 沒有權(quán)的欲望 沒有金錢的煩憂 簡(jiǎn)單有序的 維護(hù)單調(diào) 把眾生迎來送往 上了...
    41度雨閱讀 243評(píng)論 6 14
  • 【寫在前面】: 筆者是一個(gè) 80 后 IT 技術(shù)狗,做過很多技術(shù)崗位, C 語言開發(fā)、 php 網(wǎng)站后端開發(fā)、軟件...
    夜貓子愛觀察閱讀 781評(píng)論 3 11

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