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