1.7.17 • Published 4 years ago

iconman-cli v1.7.17

Weekly downloads
-
License
ISC
Repository
-
Last release
4 years ago

ironman 前端工具

前端工具箱,旨在提高前端效率,让我们专心写代码,把其他工作交给ironman就行了

使用说明

安装ironman前,需要切换npm镜像至http://pnpm.ppmoney.com

cnpm i nrm -g

# 添加pnpm私服源地址
nrm add pnpm http://pnpm.ppmoney.com/

# 使用pnpm私服
nrm use pnpm

全局安装:

npm i @ppmoney/ironman -g

功能列表

  • init 生成项目脚手架
  • upyun 又拍云静态资源上传
  • upload 项目文件上传部署
  • temp 下载组件 or 方法,组件或方法 git 仓库: git@git.scm.ppmoney.com:ironman/ironman-path.git
  • merge 项目仓库发起release-request请求
  • rm 删除文件
  • version 添加CHANGELOG.md和自动更改项目版本并提交

获取详细参数,使用ironman <command> -h/--help

前端脚手架功能

目前已经把脚手架从ppava中剥离出来,迁移至http://git.scm.ppmoney.com/ironman/ironman-template下,如ironman/ironman-template/umi为umi脚手架, 执行如下代码即可:

ironman init umi

ironman init会后下载相应脚手架,会询问是否同步到远程gitlab仓库,默认不创建远程仓库,否则输入y则会git init该项目并在pokeball远程库下创建和关联该项目,然后创建该项目对应的jenkins构建项目和添加webhook

脚手架开发

# template为脚手架模板
Usage: ironman init [template]

Example: ironman init umi

目前脚手架gitlab仓库为http://git.scm.ppmoney.com/ironman/ironman-template,在此仓库里新建你的脚手架

脚手架配置文件:template.config.js,ironman init 会读取这个文件的配置来初始化

const path = require('path')
var config = {
  platformList: {
    ppmoney: {
      upyunDomain: "https://special.ppmoney.com"
    },
    geedai: {
      upyunDomain: "https://m.geedai.com"
    }
  }
}
module.exports = {
  "replacePattern": /(js|ts|json|tsx|jsx|md|html)$/, // 需要替换的规则,正则表达式
  "prompt": [ //命令行输入配置,参考:https://www.npmjs.com/package/inquirer
    {
      "name": "platform",
      "message": "请选择业务类型(platform):",
      "type": "list",
      "choices": Object.keys(config.platformList),
    },
    {
      name: 'name',
      message: '请输入项目名称(name):',
      type: 'input',
      validate: function(input) {
        if (input == '') {
          console.warn('请输入项目名称');
          return false
        }
        return true
      }
    },
    {
      name: 'description',
      message: '请输入项目描述(description):',
      type: 'input'
    }
  ],
  //校验命令行输入值
  "validate": async function(promptData, ironmanTools) { //这里整体验证命令行的输入数据,ironmanTools为ironman提供的方法(自己写也行),这个方法必须返回一个boolean,true为通过,如果不通过会重新输入
    if (await ironmanTools.isProjectExistInPPava(promptData.platform, promptData.name)) {  //判断是否存在ppava里面
      console.warn(` this router '/${promptData.platform}/${promptData.name}' is exist in ppava, please change your project name`);
      return false;
    }
    if (ironmanTools.isFileNameExist(path.join(process.cwd(), promptData.name, '**/*'))) { //判断文件或者文件夹是否纯已经存在
      console.warn(`folder ${promptData.name} is non-empty! please change your project name`);
      return false;
    }
    return true;
  }
}

又拍云静态资源上传

# --remote为上传到又拍云的文件夹
# --dist为本地要上传的文件夹
# --platform为业务端平台
Usage: ironman upyun --remote=<remoteDir> --dist=<localDir> --platform=<platform>

Example: ironman upyun --remote=/PPava/ppmoney --dist=/dist --platform=ppmoney

全局又拍云配置: 当配置项:useUpyun为true时,ironman会去读取全局配置:

Linux系统文件目录为:/data/ironman.conf Windows系统文件目录为:C:\Users{User_Name}\ironman.conf,User_Name为当前用户名

可将又拍云配置统一放至此配置中,可多项目共享,例子中的为前端的测试又拍云, 正式的配置请存放至服务器的/data/ironman.conf下

{
  "upyun": {
      "ppmoney": {
        "cdn": "https://dev-fed.whapptransfer.com",
        "space": "dev-fed",
        "name": "userdevfed",
        "pwd": "bLoCPGCxCaCHv2WYbky1",
        "dirname": "/PPava"
      }
    }
}

发布功能

集成ppava发布功能,包括发布到测试环境和正式环境,统一使用如下命令发布,

# 默认读取ironman.config.js配置
ironman upload

# 读取ironman.config.js + ironman.config.release.js 合并的配置
cross-env IRONMAN_ENV=release ironman upload

执行ironman upload即可上传,默认为上传至/${platform}/${name}路由 如果需要添加环境,请加上环境变量IRONMAN_ENV,如

# 默认读取ironman.config.js配置
ironman upload

# 读取ironman.config.js + ironman.config.sit.js 合并的配置
IRONMAN_ENV=sit ironman upload

会上传至:/${platform}/${name}/sit

特别地:禁止本地上传至测试环境和正式环境,需要通过105.106机器统一发布,可将自己的项目加入Jenkins发布

配置文件

ironman.config.js 默认配置 比如:

module.exports = {
  "ppava": {
    "name": "umi", //项目名称
    "platform": "ppmoney", //业务端
    "title": "页面标题",
    "config": {},注入到视图的配置
    'url': 'https://h5-dev.ppmoney.com', //上传的PPava地址
    "dist": "/dist/**", //静态资源
    "document": '/dist/index.html', //视图文件
    'useUpyun': true //是否开启又拍云,默认为false,true时将静态资源上传至对应platform的又拍云空间:/PPava/${platform}/${name}下,false时上传至PPava服务器
  }
}

ironman.{IRONMAN_ENV}.js,将与默认配置合并,得到对应环境的配置 项目的路由为:

/${platform}/${name}

约定:不能使用已经存在了的项目名称

生成umi页面模板命令

# type 模板的类型:page,model,service
# namespace 模板名称
Usage: ironman merge <type> <namespace>

Example:
ironman new page banklist

ironman new model banklist

ironman new service banklist

分支merge命令

1.设置全局gitlab的token

http://git.scm.ppmoney.com/profile/account 中找到你的Private token,设置git config --global --add gitlab.token 'your gitlab token'

2.合并分支命令

# soucheBranch为合并的源分支
# targetBranch为合并的目标分支
Usage: ironman merge <soucheBranch> <targetBranch>

Example: ironman merge my-branch release-branch

3.发起merge-request请求命令

# -s 为发起merge-request请求的源分支
# -t 为发起merge-request请求的目标分支
# -m 为发起merge-request的标题
Usage: ironman merge-request -s <sourceBranch> -t <targeBranch> -m <title>

Example: ironman merge-request -s release-request -t release -m "my merge"

自动发版功能

Usage: ironman version

该功能会让你去选择更新版本类型并修改版本号和打tag,并且生成commit记录的CHANGELOG.md,建议在npm publish触发前使用,可在package.jsonscript里添加prepublishOnly: ironman version的钩子

Usage: ironman version --push

将当前分支推送到远程,用于npm publish后触发,可添加postpublish: ironman version --push钩子

jenkins 配置

测试环境

init脚手架后会自动创建jenkins项目,可在http://fe-jks-dev.ppmoney.com/job/${projectName}/浏览

正式环境

正式环境需要手动执行构建,

如需配置jenkins,可联系组长配置 Jenkins 配置可参考:http://jenkins.scm.ppmoney.com/view/%E5%89%8D%E7%AB%AF%E4%B8%93%E7%94%A8/job/h5-taskcenter/

业务端接入

新项目:

  • 新建gitlab组仓库,提供gitlab组的id,后续搭建的脚手架项目会在这个组下创建仓库并关联 npm.io;
  • 新建jenkins业务端面板,提供面板地址 npm.io;
  • 新建sentry团队 npm.io;
  • 提供jenkins构建消息发送的钉钉群机器人accessToken npm.io;

以上配置提供给ironman开发者进行相应的配置和接入,然后在使用ironman init选择属于自己的业务类型即可

旧项目:

1.对接gitlab

  • 在组仓库下新建gitlab仓库

  • 关联这个远程gitlab仓库

cd existing_folder
git init
git remote add origin http://myname@git.scm.ppmoney.com/myname/my-project.git
git add .
git commit
git push -u origin master

2.对接jenkins

  • 在相应的业务端面板新建jenkins项目
  • 在jenkins进行相关的配置
  • 对接webhook

3.对接sentry

  • 在sentry后台管理面板新建sentry项目

  • 在项目根目录添加.sentryrc文件

[auth]
token=5c805388296e45daa467cee842f2c043dd86999f98c942bcbc10d6216de707a9

[defaults]
org=sentry
url=https://sentry.ppmoney.com
project=h5-mobile # sentry后台对应的项目名称
sourcemap_upload_url=http://ppcop.ppmoney.com
platform=ppmoney # 业务端
  • 添加版本绑定和添加sourcemap上传,在项目上传发布前执行
ironman sentry releases --dist=/dist --baseTag --uploadSourcemaps

4.上线部署

  • 添加ironman.config.js配置文件
module.exports = {
  "ppava": {
    "name": "umi", //项目名称
    "platform": "ppmoney", //业务端
    "title": "页面标题",
    "config": {},注入到视图的配置
    'url': 'https://h5-dev.ppmoney.com', //上传的PPava地址
    "dist": "/dist/**", //静态资源
    "document": '/dist/index.html', //视图文件
    'useUpyun': true //是否开启又拍云,默认为false,true时将静态资源上传至对应platform的又拍云空间:/PPava/${platform}/${name}下,false时上传至PPava服务器
  }
}

ironman.{IRONMAN_ENV}.js,将与默认配置合并,得到对应环境的配置

  • 将打包文件发送到服务器部署,部署脚本添加ironman upload命令

希望