项目规范化学习

Posted on By yuanfang

学习参考文档:[项目规范化开发探索]

lerna

github:lerna 使用lerna管理大型前端项目 学习参考:lerna学习(二)

  1. lerna init --independent

    使用lerna管理项目时,可以选择两种模式。 默认的为固定模式(Fixed mode),当使用lerna init命令初始化项目时,就默认为固定模式,也可以使用 lerna init –independent 命令初始化项目,这个时候就为独立模式(Independent mode)。 固定模式中,packages下的所有包共用一个版本号(version),会自动将所有的包绑定到一个版本号上(该版本号也就是lerna.json中的version字段),所以任意一个包发生了更新,这个共用的版本号就会发生改变。 独立模式允许每一个包有一个独立的版本号,在使用lerna publish命令时,可以为每个包单独制定具体的操作,同时可以只更新某一个包的版本号。此种模式时,lerna.json中的version字段指定为independent即可。

  2. lerna bootstrap

    在每个 package 下面执行 npm install
    根据各个 package 下 package.json 里面的 dependencies 和 devDependencies 配置,使用 symlink 在各个 package 的 node_modules 下面建立引用关系
    在每个 package 下执行 npm run prepublish
    在每个 package 下执行 npm run prepare

lerna bootstrap --hoist: 如果加上了–hoist参数,那么就是告诉lerna,把所有依赖全部安装到根目录中,然后分别在各自的文件夹中创建软连接指向对应的模块实际路径。

  1. lerna add <pkg> [globs..]

Husky

github:husky

// package.json
{
  "husky": {
    "hooks": {
      "pre-commit": "npm test",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
      "pre-push": "npm test",
      "...": "..."
    }
  }
}

Lint-staged

github:Lint-staged

// package.json
{
    "husky": {
      "hooks": {
        "pre-commit": "lint-staged & npm test",
        "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
      }
    },
    "lint-staged": {
      "*.{ts,tsx}": [
        "eslint --fix",
        "git add"
      ]
    }
}

Prettier

配置: https://prettier.io/docs/en/configuration.html

// package.json
{
    "husky": {
      "hooks": {
        "pre-commit": "lint-staged & npm test",
        "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
      }
    },
    "lint-staged": {
      "*.{ts,tsx}": [
        "eslint --fix",
        "git add"
      ],
      "*.js": [
        "prettier --config ./.prettierrc --write",
        "git add"
      ]
    }
}

Commitlint

npm install --save-dev @commitlint/config-conventional @commitlint/cli

// 生成配置文件commitlint.config.js,当然也可以是 .commitlintrc.js
echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js

// package.json
"husky": {
    "hooks": {
      "pre-commit": "npm run test",
      "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS"
    }
}

standard-version

npm i --save-dev standard-version

{
  "scripts": {
    "release": "standard-version"
  }
}

conventional-changelog-cli

{
  "scripts": {
    "version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"
  }
}