lerna管理midway項目

1悟泵、配置環(huán)境

配置 NPM 源

查看 NPM 配置

npm config list

查看 NPM 源

npm config get registry

全局切換為淘寶鏡像源

npm config set registry https://registry.npm.taobao.org

全局切換官方鏡像源

npm config set registry https://registry.npmjs.org/

在開發(fā)環(huán)境中安裝 rimraf 工具芽卿,用于清理Node的緩存

npm install rimraf --save-dev

在開發(fā)環(huán)境中安裝 prettier综看,用于格式化代碼

npm install prettier --save-dev

更新依賴包

# 安裝更新管理工具
npm install -g npm-check-updates
# 檢查可更新列表
ncu
# 更新到package.json
ncu -u
# 安裝依賴即可完成更新
npm install

2瘸右、安裝 MIDWAY

初始化項目

npm 版本為 v6

# npm版本為v6
npm init midway --type=web mozi-cloud
# npm版本為v7
npm init midway -- --type=web mozi-cloud

本地開發(fā)

npm i
npm run dev
open http://localhost:7001/

部署

npm start
npm stop
# 打包發(fā)布到serverless服務器
npm run deploy

內置指令

  • 使用 npm run lint 來做代碼風格檢查眨补。
  • 使用 npm test 來執(zhí)行單元測試命雀。

3旗笔、MIDWAY DOCKER 配置

Dockerfile 文件

FROM node:lts-alpine

WORKDIR /app

# 安裝tzdata,默認的alpine基礎鏡像不包含時區(qū)組件彪置,安裝后可通過TZ環(huán)境變量配置時區(qū)
RUN apk add --no-cache tzdata

# 設置時區(qū)為中國東八區(qū),這里的配置可以被docker-compose.yml或docker run時指定的時區(qū)覆蓋
ENV TZ="Asia/Shanghai"

# 如果各公司有自己的私有源蝇恶,可以替換registry地址,如使用官方源注釋下一行
RUN npm set registry https://registry.npm.taobao.org

# 安裝開發(fā)期依賴  /app/package.json
COPY package.json ./package.json
RUN npm install
# 構建項目
COPY . .
RUN npm run build
# 刪除開發(fā)期依賴
RUN rm -rf node_modules && rm package-lock.json
# 安裝開發(fā)環(huán)境依賴
RUN npm install --production

# 如果端口更換拳魁,這邊可以更新一下
EXPOSE 7001

CMD ["npm", "run", "docker"]

.dockerignore Docker 忽略文件

logs/
npm-debug.log
yarn-error.log
node_modules/
package-lock.json
yarn.lock
coverage/
dist/
.idea/
run/
.DS_Store
*.sw*
*.un~
.tsbuildinfo
.tsbuildinfo.*
typings/

docker-compose.yml 打包文件

version: "3"
services:
  midway:
    build: .
    image: aipeli/mozi-cloud
    ports:
      - 7001:7001 # 宿主機端口:容器端口

y.yml 發(fā)布到云平臺

service: mozi-cloud  ## 應用發(fā)布到云平臺的名字,一般指應用名

provider:
  name: aliyun        ## 發(fā)布的云平臺撮弧,aliyun潘懊,tencent 等
  runtime: nodejs12
  memorySize: 512

deployType: egg       ## 部署的應用類型

package:
  include:
    - public/*
  exclude:
    - package-lock.json   ## 忽略 package-lock.json 文件
    - .dockerignore
    - docker-compose.yml
    - Dockerfile
    - f.yml
    - README.zh-CN.md

打包發(fā)布云服務僅支持騰訊姚糊、阿里

# 在package.json中scripts增加
  "deploy": "midway-bin deploy"
# 打包發(fā)布
npm run deploy

4、打包鏡像發(fā)布 dockerhub 上

安裝好 docker desk

在 docker-compose.yml 里右鍵 compose-up

5授舟、PM2 管理 NODE 應用

全局安裝 pm2

npm install pm2 -g    # 命令行安裝 pm2

常用命令

pm2 start     # 啟動一個服務
pm2 list      # 列出當前的服務
pm2 stop name|id     # 停止某個服務
pm2 restart   # 重啟某個服務
pm2 delete name|id    # 刪除某個服務
pm2 logs      # 查看服務的輸出日志
pm2 monit      # 打開pm2的監(jiān)示界面

本地啟動 pm2

# 本地部署前需要執(zhí)行編譯 npm run build
# 在package.json中增加
  "pm2_build": "npm run build && cross-env NODE_ENV=development pm2 start ./bootstrap.js --name mozi-cloud -i 4"

# 運行
npm run pm2_build

--name 用于指定應用名
-i 用于指定啟動的實例數(shù)(進程)救恨,會使用 cluster 模式啟動

docker 中運行 pm2

# 在package.json中增加
  "pm2_docker": "pm2-runtime start ./bootstrap.js --name mozi-cloud -i 4",
# 在Dockerfile中增加
  RUN npm install pm2 -g
  CMD ["npm", "run", "pm2_docker"]

6、用lerna管理項目開發(fā)中的包

安裝

npm install --global lerna

創(chuàng)建lerna項目

mkdir mozi
cd mozi
lerna init

lerna初始化的目錄結構


├── mozi
├── packages
├── lerna.json
└── package.json

默認是npm, 而且每個子package都有自己的node_modules释树,通過這樣設置后肠槽,只有頂層有一個node_modules

  • 修改頂層 package.json and lerna.json
# package.json 文件加入
 "private": true,
  "workspaces": [
    "packages/*"
  ],

# lerna.json 文件加入
"useWorkspaces": true,
"npmClient": "yarn",

在項目根目錄下創(chuàng)建packages,在packages目錄下創(chuàng)建組件包

# npm v6
npm init midway --type=component core
# npm v7
npm init midway -- --type=component core

項目整體的目錄結構

├── packages
│    ├── core
│    │   ├── src
│    │   │  ├── controller                  // 組件行為配置
│    │   │  │   └── index.ts
│    │   │  ├── service                     // 組件行為配置
│    │   │  │   └── index.ts
│    │   │  ├── configuration.ts            // 組件行為配置
│    │   │  └── index.ts                    // 組件導出入口
│    │   ├── tsconfig.json
│    │   └── package.json
│    ├── socket
│    │   └── 目錄結構同上
│    └── web
│        └── 目錄結構同上
├── lerna.json
└── package.json

修改midway項目package.json

#原來
private = true,
# 改為
private = false,
# 不修改lerna無法管理該包奢啥,lerna list也不能顯示出來

引用自定義的組件

lerna add <package>[@version] [--dev] [--exact]

增加本地或者遠程package做為當前項目packages里面的依賴

  • --dev devDependencies 替代 dependencies
  • --exact 安裝準確版本秸仙,就是安裝的包版本前面不帶^, Eg: "^2.20.0" ? "2.20.0"
# 如cloud中引用core
lerna add core --scope=cloud --dev
lerna add core --scope=cloud --save

查看lerna組件

lerna list

安裝所有組件依賴

lerna bootstrap

默認是npm i,因為我們指定過yarn,so,run yarn install,會把所有包的依賴安裝到根node_modules.

導入本地已經存在的包

lerna import <path-to-external-repository>

刪除所有包的node_modules目錄

lerna clean

列出下次發(fā)版lerna publish 要更新的包桩盲。

lerna changed

發(fā)布項目所有的包

lerna publish

會打tag寂纪,上傳git,上傳npm。
如果你的包名是帶scope的例如:"name": "@username/core",
那需要在packages.json添加

 "publishConfig": {
    "access": "public"
  },
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赌结,一起剝皮案震驚了整個濱河市捞蛋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柬姚,老刑警劉巖拟杉,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伤靠,居然都是意外死亡捣域,警方通過查閱死者的電腦和手機啼染,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門宴合,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迹鹅,你說我怎么就攤上這事卦洽。” “怎么了斜棚?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵阀蒂,是天一觀的道長。 經常有香客問我弟蚀,道長蚤霞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任义钉,我火速辦了婚禮昧绣,結果婚禮上,老公的妹妹穿的比我還像新娘捶闸。我一直安慰自己夜畴,他們只是感情好拖刃,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贪绘,像睡著了一般兑牡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上税灌,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天均函,我揣著相機與錄音,去河邊找鬼菱涤。 笑死边酒,一個胖子當著我的面吹牛,可吹牛的內容都是我干的狸窘。 我是一名探鬼主播墩朦,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翻擒!你這毒婦竟也來了氓涣?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤陋气,失蹤者是張志新(化名)和其女友劉穎劳吠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巩趁,經...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡痒玩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了议慰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蠢古。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖别凹,靈堂內的尸體忽然破棺而出草讶,到底是詐尸還是另有隱情,我是刑警寧澤炉菲,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布堕战,位于F島的核電站,受9級特大地震影響拍霜,放射性物質發(fā)生泄漏嘱丢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一祠饺、第九天 我趴在偏房一處隱蔽的房頂上張望越驻。 院中可真熱鬧,春花似錦、人聲如沸伐谈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诵棵。三九已至抠蚣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間履澳,已是汗流浹背嘶窄。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留距贷,地道東北人柄冲。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像忠蝗,于是被迫代替她去往敵國和親现横。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內容

  • 項目級 monorepo 策略最佳實踐[https://fed.taobao.org/blog/taofed/do...
    忍不住的k閱讀 3,960評論 0 1
  • 當前端項目變得越來越大的時候阁最,我們通常會將公共代碼拆分出來戒祠,成為一個個獨立的npm包進行維護。但是這樣一來速种,各種包...
    SCQ000閱讀 5,519評論 0 50
  • 一姜盈、前言 最近準備開發(fā)前端的一個模塊化的庫,業(yè)務級別配阵,要求可以任意插拔隨意組合馏颂。大型工程,需要多人維護棋傍。以前的項目...
    年輕人多學點閱讀 1,216評論 0 2
  • 一救拉、前言 最近準備開發(fā)前端的一個模塊化的庫,業(yè)務級別舍沙,要求可以任意插拔隨意組合近上。大型工程,需要多人維護拂铡。以前的項目...
    NowhereToRun閱讀 33,954評論 1 20
  • 這里主要介紹lerna、yarn workspaces的使用方法與職能界限葱绒。 lerna:項目管理與發(fā)版 work...
    說叁兩事閱讀 870評論 0 0