114 lines
3.2 KiB
JavaScript
114 lines
3.2 KiB
JavaScript
|
/**
|
|||
|
* Created by Zhang Peng on 2017/6/14.
|
|||
|
*/
|
|||
|
const path = require('path')
|
|||
|
const webpack = require('webpack')
|
|||
|
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
|||
|
|
|||
|
|
|||
|
module.exports = {
|
|||
|
|
|||
|
// 这里应用程序开始执行
|
|||
|
// webpack 开始打包
|
|||
|
// 本例中 entry 为多入口
|
|||
|
entry: {
|
|||
|
// 第三方库
|
|||
|
vendor: ['babel-polyfill']
|
|||
|
},
|
|||
|
|
|||
|
// webpack 如何输出结果的相关选项
|
|||
|
output: {
|
|||
|
// 所有输出文件的目标路径
|
|||
|
// 必须是绝对路径(使用 Node.js 的 path 模块)
|
|||
|
path: path.resolve(__dirname, '../dist'),
|
|||
|
|
|||
|
// 「入口分块(entry chunk)」的文件名模板(出口分块?)
|
|||
|
// filename: "bundle.min.js",
|
|||
|
// filename: "[name].js", // 用于多个入口点(entry point)(出口点?)
|
|||
|
// filename: "[chunkhash].js", // 用于长效缓存
|
|||
|
filename: '[name].[hash:8].js',
|
|||
|
|
|||
|
// 「source map 位置」的文件名模板
|
|||
|
sourceMapFilename: '[name].map'
|
|||
|
},
|
|||
|
|
|||
|
// 关于模块配置
|
|||
|
module: {
|
|||
|
|
|||
|
// 模块规则(配置 loader、解析器等选项)
|
|||
|
rules: [
|
|||
|
// 这里是匹配条件,每个选项都接收一个正则表达式或字符串
|
|||
|
// test 和 include 具有相同的作用,都是必须匹配选项
|
|||
|
// exclude 是必不匹配选项(优先于 test 和 include)
|
|||
|
// 最佳实践:
|
|||
|
// - 只在 test 和 文件名匹配 中使用正则表达式
|
|||
|
// - 在 include 和 exclude 中使用绝对路径数组
|
|||
|
// - 尽量避免 exclude,更倾向于使用 include
|
|||
|
{
|
|||
|
// 语义解释器,将 js/jsx 文件中的 es2015/react 语法自动转为浏览器可识别的 Javascript 语法
|
|||
|
test: /\.jsx?$/,
|
|||
|
include: path.resolve(__dirname, '../src'),
|
|||
|
exclude: /node_modules/,
|
|||
|
|
|||
|
// 应该应用的 loader,它相对上下文解析
|
|||
|
// 为了更清晰,`-loader` 后缀在 webpack 2 中不再是可选的
|
|||
|
// 查看 webpack 1 升级指南。
|
|||
|
loader: 'babel-loader'
|
|||
|
},
|
|||
|
|
|||
|
{
|
|||
|
// css 加载
|
|||
|
test: /\.css$/,
|
|||
|
use: ['style-loader', 'css-loader']
|
|||
|
},
|
|||
|
|
|||
|
{
|
|||
|
// less 加载
|
|||
|
test: /\.less$/,
|
|||
|
use: ['style-loader', 'css-loader', 'less-loader']
|
|||
|
},
|
|||
|
|
|||
|
{
|
|||
|
// 字体加载
|
|||
|
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
|||
|
loader: 'url-loader',
|
|||
|
options: {
|
|||
|
limit: 10000,
|
|||
|
name: 'static/fonts/[name].[hash:8].[ext]'
|
|||
|
}
|
|||
|
}
|
|||
|
]
|
|||
|
},
|
|||
|
|
|||
|
// 解析模块请求的选项
|
|||
|
// (不适用于对 loader 解析)
|
|||
|
resolve: {
|
|||
|
// 使用的扩展名
|
|||
|
extensions: ['.js', '.jsx', '.json'],
|
|||
|
|
|||
|
alias: {
|
|||
|
'@': path.resolve(__dirname, '../src')
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// 附加插件列表
|
|||
|
plugins: [
|
|||
|
|
|||
|
/**
|
|||
|
* https://doc.webpack-china.org/plugins/html-webpack-plugin/
|
|||
|
* 用于简化 HTML 文件(index.html)的创建,提供访问 bundle 的服务
|
|||
|
*/
|
|||
|
new HtmlWebpackPlugin({
|
|||
|
title: 'reactapp',
|
|||
|
template: 'public/index.html',
|
|||
|
favicon: 'public/favicon.ico'
|
|||
|
}),
|
|||
|
|
|||
|
|
|||
|
// 将多个入口起点之间共享的公共模块,生成为一些 chunk,并且分离到单独的 bundle 中
|
|||
|
new webpack.optimize.CommonsChunkPlugin({
|
|||
|
name: 'vendor' // 指定公共 bundle 的名字
|
|||
|
})
|
|||
|
]
|
|||
|
}
|