1、配置环境
配置 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/
在开发环境中安装 rimraf 工具,用于清理Node的缓存
npm install rimraf --save-dev
在开发环境中安装 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
本地开发
npm i
npm run dev
open http://localhost:7001/
部署
npm start
npm stop
# 打包发布到serverless服务器
npm run deploy
内置指令
- 使用
npm run lint
来做代码风格检查。 - 使用
npm test
来执行单元测试。
3、MIDWAY DOCKER 配置
Dockerfile 文件
FROM node:lts-alpine
WORKDIR /app
# 安装tzdata,默认的alpine基础镜像不包含时区组件,安装后可通过TZ环境变量配置时区
RUN apk add --no-cache tzdata
# 设置时区为中国东八区,这里的配置可以被docker-compose.yml或docker run时指定的时区覆盖
ENV TZ="Asia/Shanghai"
# 如果各公司有自己的私有源,可以替换registry地址,如使用官方源注释下一行
RUN npm set registry https://registry.npm.taobao.org
# 安装开发期依赖 /app/package.json
COPY package.json ./package.json
RUN npm install
# 构建项目
COPY . .
RUN npm run build
# 删除开发期依赖
RUN rm -rf node_modules && rm package-lock.json
# 安装开发环境依赖
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 发布到云平台
service: mozi-cloud ## 应用发布到云平台的名字,一般指应用名
provider:
name: aliyun ## 发布的云平台,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
打包发布云服务仅支持腾讯、阿里
# 在package.json中scripts增加
"deploy": "midway-bin deploy"
# 打包发布
npm run deploy
4、打包镜像发布 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的监示界面
本地启动 pm2
# 本地部署前需要执行编译 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 用于指定启动的实例数(进程),会使用 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管理项目开发中的包
安装
npm install --global lerna
创建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",
在项目根目录下创建packages,在packages目录下创建组件包
# 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 [@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
删除所有包的node_modules目录
lerna clean
列出下次发版lerna publish
要更新的包。
lerna changed
发布项目所有的包
lerna publish
会打tag,上传git,上传npm。
如果你的包名是带scope的例如:"name": "@username/core",
那需要在packages.json添加
"publishConfig": {
"access": "public"
},