工程化考虑因素
- PC还是移动端
- 移动端 spa
- ssr
- pc端 mpa
- 兼容的浏览器和版本
- 多人参与还是单人
- 多人合作
- 代码规范,Eslint + prettier
- 提交规范,commit规范,ci/cd
- 技术栈
- vue
- react
- 样式处理器
- less
- sass
- 语法
- ts
- es6+
- 模板引擎
- ejs
- pug
- 是否要支持第三方字体
- 工具类
- 安装依赖包,切换国内源
- 配置.npmrc 设置npm默认的项目源
- 测试
- 单元测试
- 集成测试
- e2e测试
webpack配置
// webpack.config.jsconst path = require('path')const miniCssExtractPlugin = require('mini-css-extract-plugin')const htmlWebpackPlugin = require('html-webpack-plugin')const { CleanWebpackPlugin } = require('clean-webpack-plugin')module.exports = { mode: 'development', entry: './src/index.js', // entry: { // index: './src/index.js', // login: './src/login.js' // }, output: { path: path.resolve(__dirname, './dist'), filename: '[name]-[chunkhash:7].js' }, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.less$/, use: [ // miniCssExtractPlugin.loader, // 'css-loader', // 'postcss-loader', // 'less-loader' 'kkb-style-loader', 'kkb-css-loader', 'kkb-less-loader', ] }, { test: /\.js$/, use: [ 'replace-loader', { loader: 'replace-loader-async', options: { name: '赵日天' } } ] } ] }, resolveLoader: { modules: ['node_modules', './myLoaders'] }, plugins: [ new htmlWebpackPlugin({ template: './src/index.html', filename: 'index.html', // chunks: ['index'], }), // new htmlWebpackPlugin({ // template: './src/index.html', // filename: 'login.html', // chunks: ['login'], // }), new CleanWebpackPlugin(), // new miniCssExtractPlugin({ // filename: 'css/[name]-[chunkhash:7].css', // }) ]}// myLoaders/replace-loader,module.exports = function (source) { const result = source.replace("hello", '哇塞') return result;}// myLoaders/replace-loader-asyncmodule.exports = function (source) { const callback = this.async() setTimeout(() => { const result = source.replace("老王", this.query.name) callback(null, result); }, 1000)}// myLoaders/kkb-style-loadermodule.exports = function (source) { return `const e = document.createElement('style') e.innerHTML = ${source} document.head.appendChild(e) `}// myLoaders/kkb-less-loaderconst less = require('less')module.exports = function (source) { less.render(source, (e, output) => { this.callback(e, output.css) })}// myLoaders/kkb-css-loadermodule.exports = function (source) { return JSON.stringify(source)}