前言:笔者把学习的webpack知识从基础到原理写个系列,以便回顾。希望能帮助到更多正在学习webpack的小伙伴。
在webpack中使用eslint
和CI/CD系统集成
本地开发阶段增加precommit钩子
- 安装 husky
npm i husky -D
- 增加 npm script,通过lint-staged增量检查修改的文件
"scripts":{ "precommit":"lint-staged" }, "lint-staged":{ "linters:{ "*.{js,css}":["eslint --fix","git add"] } }
和webpack集成
- 使用eslint-loader,构建时检查js规范
// webpack.config.js module.exports = { module:{ rules:[ { test:/\.js$/, exclude:/node_modules/, use:[ "babel-loader", "eslint-loader" ] } ] } }
使用eslint-loader
安装依赖包
npm i eslint eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y eslint-loader babel-eslint eslint-config-airbnb -D
在webpack中增加eslint-loader
// webpack.config.js module.exports = { module:{ rules:[ { test:/\.js$/, exclude:/node_modules/, use:[ "babel-loader", "eslint-loader" ] } ] } }
在根目录创建.eslintrc.js
module.exports = { "parse":"babel-eslint", "extends":"airbnb", "env":{ "browser":true, "node":true } // 自定义规则 // rules:{ // } }
打包构建在命令后就可以看到eslint提示的代码错误
webpack打包组件和基础库
实现一个大整数加法库的打包
- 需要打包压缩版和非压缩版本
- 支持AMD/CJS/ESM模块引入
打包输出库的名称
- 未压缩版 large-number.js
- 压缩版 large-number.min.js
如何将库暴露出去
- library: 指定库的全局变量
- libraryTarget: 支持库引入的方式
开始
创建新项目文件夹large-number
创建新项目文件夹large-number
安装webpack
npm i webpack webpack-cli -D
安装terser-webpack-plugin
npm i terser-webpack-plugin -D
创建webpack.config.js
const TerserPlugin = require('terser-webpack-plugin'); module.exports = { entry:{ "large-number":"./src/index.js", "large-number.min":"./src/index.js", }, output:{ filename:'[name].js', library: 'largeNumber', libraryTarget:"umd", libraryExport:'default' }, mode: 'none', optimization: { minimize: true, minimizer: [ new TerserPlugin({ include: /\.min\.js$/, }) ] } }
创建src/index.js
export default function add(a, b) { let i = a.length - 1; let j = b.length - 1; let carry = 0; let ret = ''; while (i >= 0 || j >= 0) { let x = 0; let y = 0; let sum; if (i >= 0) { x = a[i] - '0'; i --; } if (j >= 0) { y = b[j] - '0'; j --; } sum = x + y + carry; if (sum >= 10) { carry = 1; sum -= 10; } else { carry = 0; } // 0 + '' ret = sum + ret; } if (carry) { ret = carry + ret; } return ret; }
在根目录创建index.js
// 区分生产环境 和测试环境 if (process.env.NODE_ENV === 'production') { module.exports = require('./dist/large-number.min.js'); } else { module.exports = require('./dist/large-number.js'); }
增加npm scripts
"scripts": { "build": "webpack", "prepublish": "webpack" },
打包 npm run build
发布npm包
- npm login
- npm publish
在其他项目中使用large-count包
安装
npm i large-count -S
使用
import largeCount from 'large-count';
render(){
const largeRes = largeCount('99','1')
return (
<div>
{ largeRes }
</div>
)
}
- 打包 npm run build 即可正常看到结果
以上代码放到了github
可以下载调试。