entry指明用哪一個文件來做爲依賴圖的起點,而後webpack找到enrty依賴了哪些模塊和庫。webpack從這裏開始轉發。css
module.exports = {
// 單入口
entry:'src/index.js'
//多入口,數組形式
[
isEnvDevelopment && require.resolve('react-dev-utils/webpackHotDevClient'), //isEnvDevelopment = webpackEnv === 'development';
paths.appIndexJs //appIndexJs: resolveModule(resolveApp, 'src/index'),
].filter(Boolean)
}
複製代碼
指明將webpack打包生成的bundle輸出到哪裏,以及這些bundle的命名規則。html
module.exports = {
output:{
path:'build' //bundle輸出到何處
filename:'[name].bundle.js' //entry中的文件生成的bundle的名稱
chunkFilename:'[name].[contenthash:8].chunk.js' //非入口(non-entry) chunk 文件的名稱。
}
}
複製代碼
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [
{ loader: 'style-loader' },
{
loader: 'css-loader',
options: {
modules: true
}
},
{ loader: 'sass-loader' } //執行順序sass-loader ->css-loader ->style-loader
]
}
]
}
};
複製代碼
插件能夠用於執行範圍更廣的任務。包括:打包優化,資源管理,注入環境變量。能夠用來處理各類各樣的任務。node
//使用一個plugin
//一、須要 require()改插件
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 經過 npm 安裝
const webpack = require('webpack'); // 用於訪問內置插件
module.exports = {
plugins: [
//二、屢次使用的插件,經過使用 new 來建立它的一個實例。
new HtmlWebpackPlugin({template: './src/index.html'})
]
};
複製代碼
設置相應環境以執行相應的優化(optimization),默認爲productionreact
module.exports = {
mode: isEnvProduction ? 'production' : isEnvDevelopment && 'development',
}
複製代碼
在遇到第一個錯誤時,webpack是否中止打包。webpack
module.exports = {
bail: true //退出其打包過程
};
複製代碼
指明webpack是否,及如何生成source map。git
module.exports = {
//source-map 原始源代碼
//cheap-module-source-map 原始源代碼(僅限行)
devtool: isEnvProduction ? 'source-map' : 'cheap-module-source-map'
}
複製代碼
module.exports = {
//...
optimization: {
//是否使用 TerserPlugin 壓縮true bundle。mode爲production時默認爲true
minimize: false,
//使用定製 TerserPlugin 實例,覆蓋默認壓縮工具(minimizer)。
minimizer: [
new TerserPlugin({
cache: true,
parallel: true,
sourceMap: true, // Must be set to true if using source-maps in production
terserOptions: {
// https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
}
}),
],
// 打包優化策略(待深刻學習)
splitChunks: {
// include all types of chunks
chunks: 'all'
},
// 用於優化緩存(待深刻學習)
runtimeChunk: true
}
};
複製代碼
設置模塊如何被解析github
module.exports = {
resolve: {
//設置別名
alias: {
'react-native': 'react-native-web',
'~': path.resolve(__dirname, '../src/'),
'@locale': '@enos/dpl/lib/locale/localeUtils'
},
//自動解析擴展名,引入文件時就不須要加上擴展名了
extensions: ['.wasm', '.mjs', '.js', '.json'], //如引入file.js,只須要import File from '../path/to/file';
//在哪些目錄下解析模塊
modules: ['node_modules'],
//額外使用的插件
plugins: [
new DirectoryNamedWebpackPlugin()
]
}
};
複製代碼
僅用於解析 webpack 的 loader 包web
配置項目中不一樣類型和功能的模塊npm
module.exports = {
module: {
rules: [
{parser: {requireEnsure: false}}, //解析器
{
enforce: 'pre', //前置loader
exclude: /node_modules\/(?!(ansi-styles)\/).*/, //排除哪些文件
include: paths.appSrc, //包括哪些文件
loader: require.resolve('url-loader'), //廢棄,支持use替代
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 1,
},
},
],
},
{
test: /\.css$/,
oneOf: [
//當規則匹配時,只使用第一個匹配規則。
{
resourceQuery: /inline/, // foo.css?inline
use: 'url-loader',
},
{
resourceQuery: /external/, // foo.css?external
use: 'file-loader',
},
],
},
],
},
};
複製代碼
這些選項能夠配置是否 polyfill 或 mock 某些 Node.js 全局變量和模塊。json
module.exports = {
node: {
dns: 'mock',
fs: 'empty',
path: true,
url: false
}
};
複製代碼
性能配置
module.exports = {
performance: {
hints: false, //false | "error" | "warning" 文件過大時如何報錯
}
};
複製代碼