JTangming / blog

My repository on GitHub.
Other
53 stars 0 forks source link

前端工程化相关 #28

Open JTangming opened 4 years ago

JTangming commented 4 years ago

1. 用 husky 和 lint-staged 构建 Git commit 代码检查工作流

husky 安装后,可以很方便的在 package.json 配置 git hook 脚本。

commitlint 规范 commit log

commit-msg 搭配 commitlint,它可以帮助我们 lint commit messages,如果我们提交的 log 不符合规范,直接拒绝提交。可以在 config 配置文件中优化相关信息。

module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'scope-case': [2, 'always', ['lower-case', 'pascal-case', 'camel-case']],
    'subject-case': [2, 'never', []]
  }
};

2. conventional-changelog-cli 生成 changeLog

目前我们的工作量和他们类似:

Recommended workflow

  1. Make changes
  2. Commit those changes
  3. Make sure Travis turns green
  4. Bump version in package.json
  5. conventionalChangelog
  6. Commit package.json and CHANGELOG.md files
  7. Tag
  8. Push

如我们项目中 package.json script 中{ "bump": "SKIP_TAG=true npm run release"},去执行5、6、7、8的操作。

JTangming commented 4 years ago

Eslint & Prettier

Eslint 是一个linter,支持 auto fix,prettier 是一个 formatter。

eslint 与 prettier 是有一些配置冲突的,可以用相关插件来解决冲突。如 eslint-config-prettier、eslint-plugin-prettier。

eslint-plugin-prettier 插件会调用 prettier 对你的代码风格进行检查,其原理是先使用 prettier 对你的代码进行格式化,然后与格式化之前的代码进行对比,如果过出现了不一致,这个地方就会被 prettier 进行标记。eslint-plugin-prettier 也可以将 prettier 的错误提交给 eslint,通过 eslint 来提示错误。

通过使用 eslint-config-prettier 配置,能够关闭一些不必要的或者是与 prettier 冲突的 lint 选项。这样我们就不会看到一些 error 同时出现两次

开发中我使用 vscode 编码,通过 vscode 配置(注意不需要启用 editor.formatOnSave 选项):

“eslint.autoFixOnSave”: true

lint 发展史

JSLint 的问题是所有的代码风格和规则都是内置好的,Douglas Crockford 不会向开发者妥协开放配置或者修改他觉得是对的规则。

Anton Kovalyov 吐槽:「JSLint 是让你的代码风格更像 Douglas Crockford 的而已」,并且在 2011 年 Fork 原项目开发了 JSHint。

JSHint 的特点就是可配置,同时文档也相对完善,而且对开发者友好。很快大家就从 JSLint 转向了 JSHint。

2013 年的 6 月份,Zakas 发布了全新的 lint 工具——ESLint。是基于 AST 的 lint,可以动态执行额外的规则,同时可以很方便的扩展规则。利用 AST 处理规则,用 Esprima 解析代码,执行速度要比只需要一步搞定的 JSHint 慢很多。

真正让 ESLint 逆袭的是 ECMAScript 6 的出现。ESLint 可扩展的优势一下就体现出来了,不仅可以扩展规则,甚至连解析器也能替换。Babel 团队就为 ESLint 开发了 babel-eslint 替换默认解析器,让 ESLint 率先支持 ES2015 语法。

JTangming commented 4 years ago

CMD/AMD/ES Module

JTangming commented 4 years ago

webpack

1. how-to-write-a-pluginWebpack原理-编写Plugin

2. Loader 和 Plugin

3. webpack 的构建流程

4. 提高 webpack 的构建速度

5. Webpack 热更新实现原理分析

JTangming commented 4 years ago

babel

babel astexplorer Babel 插件手册

JTangming commented 4 years ago

gitlab CI/CD