lerna管理midway项目

2021-05-31  本文已影响0人  Aipeli

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

内置指令

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 文件加入
 "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 <package>[@version] [--dev] [--exact]

增加本地或者远程package做为当前项目packages里面的依赖

# 如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

列出下次发版lerna publish 要更新的包。

lerna changed

发布项目所有的包

lerna publish

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

 "publishConfig": {
    "access": "public"
  },
上一篇下一篇

猜你喜欢

热点阅读