nginx-tutorial/examples/reactapp/config/webpack.config.base.js

114 lines
3.2 KiB
JavaScript
Raw Normal View History

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