美文网首页
lerna管理midway项目

lerna管理midway项目

作者: Aipeli | 来源:发表于2021-05-31 17:18 被阅读0次

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

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

    lerna changed
    

    发布项目所有的包

    lerna publish
    

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

     "publishConfig": {
        "access": "public"
      },
    

    相关文章

      网友评论

          本文标题:lerna管理midway项目

          本文链接:https://www.haomeiwen.com/subject/wifgsltx.html