后续 react 版
node环境,项目目录,初始化... 等非配置相关操作在此略过!
总体兼容到ie9,持续维护中,致力理清webpack原生配置,实用为主,抵制第三方高度封装的脚手架,欢迎各种吐槽!
实现功能:
- es6兼容 语法检测 代码压缩
- css兼容(ie10) 样式分离 代码压缩
- html 代码压缩
- 代理服务
- 数据模拟
预期实现功能
- 模块热替换(目前只能实时刷新) js库代码分离 css兼容 hash值缓存控制
环境
npm install --save-dev webpack webpack-cli webpack-merge
通用-webpack.base.conf.js
js
-
兼容:
npm install --save-dev babel-loader babel-cli babel-preset-env babel-preset-stage-2 -
配置:
- 创建.babelrc,用于babel调用的插件配置
{ "presets": ["env","stage-2"] }
- 创建.babelrc,用于babel调用的插件配置
-
补充:
- Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,所以需要babel-polyfill来实现。
npm install --save-dev babel-polyfill
- Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,所以需要babel-polyfill来实现。
-
配置:
- webpack.base.conf.js入口文件配置:
entry: ['babel-polyfill', './src/index.js'],
- webpack.base.conf.js入口文件配置:
-
语法检测:
npm install --save-dev eslint eslint-loader babel-eslint -
压缩:
const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); new UglifyJSPlugin(),
CSS
npm install --save-dev style-loader css-loader less less-loader sass-loader node-sass
-
样式分离:
npm install --save-dev extract-text-webpack-plugin@next -
配置:
const ExtractTextPlugin = require("extract-text-webpack-plugin");
rules: [
... { test: /.css$/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" }) } ]
plugins: [
new ExtractTextPlugin("styles.css"),
] -
压缩:
npm install --save-dev optimize-css-assets-webpack-plugin -
兼容:
npm install --save-dev autoprefixer postcss-loader -
配置:
- 新建 postcss.config.js
// 处理css前缀,用来更好的兼容各种浏览器,在 package.json中 使用 browserslist 字段已经定义好了浏览器适配(官方推荐)
module.exports = { plugins: [ require('autoprefixer') ] } - 在 package.json 中添加字段
"browserslist": [ "> 1%", "last 2 versions", "not ie <= 8" ],
- 新建 postcss.config.js
html
npm install --save-dev html-webpack-plugin
文件
npm install --save-dev url-loader
其他
npm install --save-dev clean-webpack-plugin // 清理/dist文件夹
npm install --save axios // 数据请求库
npm install --save-dev webpack-spritesmith // 雪碧图
npm install --save lodash jquery@1.x js-cookie moment // js常用函数库
调试
1. *配置:webpack.dev.conf.js*
<code>devtool: 'inline-source-map',</code>
开发服务器
1. *使用webpack-dev-server 提供的简单的 web 服务器,实时重新加载(live reloading):*
<code>npm install --save-dev webpack-dev-server</code>
2. *配置:webpack.dev.conf.js*
<code>devServer: {
contentBase: './dist',
hot: true
},</code>
3. 数据模拟
npm install --save-dev webpack-api-mocker
项目根目录创建mock文件夹,创建数据文件index.js,配置:
const apiMocker = require('webpack-api-mocker');
before(app) {
apiMocker(app, path.resolve(__dirname, './mock/index.js'));
}
相关链接
完整代码,移步 项目