/* config.module.rule(‘pug’).oneOf(‘pug-vue’) */
{
resourceQuery: /vue/,
use: [
/* config.module.rule(‘pug’).oneOf(‘pug-vue’).use(‘pug-plain-loader’) */
{
loader: ‘pug-plain-loader’
}
]
},
/* config.module.rule(‘pug’).oneOf(‘pug-template’) */
{
use: [
/* config.module.rule(‘pug’).oneOf(‘pug-template’).use(‘raw’) */
{
loader: ‘raw-loader’
},
/* config.module.rule(‘pug’).oneOf(‘pug-template’).use(‘pug-plain-loader’) */
{
loader: ‘pug-plain-loader’
}
]
}
]
},
/* config.module.rule(‘css’) */
{
test: /.css$/,
oneOf: [
/* config.module.rule(‘css’).oneOf(‘vue-modules’) */
{
//
resourceQuery: /module/,
use: [
/* config.module.rule(‘css’).oneOf(‘vue-modules’).use(‘vue-style-loader’) */
{
// 插入到界面生效
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘css’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
// 编译
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘css’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
// 兼容性处理
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘css’).oneOf(‘vue’) */
{
//
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘css’).oneOf(‘vue’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘css’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘css’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘css’).oneOf(‘normal-modules’) */
{
// .module.xx 文件
test: /.module.\w+$/,
use: [
/* config.module.rule(‘css’).oneOf(‘normal-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘css’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘css’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘css’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘css’).oneOf(‘normal’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘css’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘css’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
}
]
},
/* config.module.rule(‘postcss’) */
{
test: /.p(ost)?css$/,
oneOf: [
/* config.module.rule(‘postcss’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘postcss’).oneOf(‘vue-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘postcss’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘postcss’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘postcss’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘postcss’).oneOf(‘vue’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘postcss’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘postcss’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘postcss’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘postcss’).oneOf(‘normal-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘postcss’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘postcss’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘postcss’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘postcss’).oneOf(‘normal’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘postcss’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘postcss’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
}
]
},
/* config.module.rule(‘scss’) */
{
test: /.scss$/,
oneOf: [
/* config.module.rule(‘scss’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘scss’).oneOf(‘vue-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘scss’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘scss’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘scss’).oneOf(‘vue-modules’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘scss’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘scss’).oneOf(‘vue’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘scss’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘scss’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘scss’).oneOf(‘vue’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘scss’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘scss’).oneOf(‘normal-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘scss’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘scss’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘scss’).oneOf(‘normal-modules’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘scss’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘scss’).oneOf(‘normal’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘scss’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘scss’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘scss’).oneOf(‘normal’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false
}
}
]
}
]
},
/* config.module.rule(‘sass’) */
{
test: /.sass$/,
oneOf: [
/* config.module.rule(‘sass’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘sass’).oneOf(‘vue-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘sass’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘sass’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘sass’).oneOf(‘vue-modules’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false,
sassOptions: {
indentedSyntax: true
}
}
}
]
},
/* config.module.rule(‘sass’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘sass’).oneOf(‘vue’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘sass’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘sass’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘sass’).oneOf(‘vue’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false,
sassOptions: {
indentedSyntax: true
}
}
}
]
},
/* config.module.rule(‘sass’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘sass’).oneOf(‘normal-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘sass’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘sass’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘sass’).oneOf(‘normal-modules’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false,
sassOptions: {
indentedSyntax: true
}
}
}
]
},
/* config.module.rule(‘sass’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘sass’).oneOf(‘normal’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘sass’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘sass’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘sass’).oneOf(‘normal’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false,
sassOptions: {
indentedSyntax: true
}
}
}
]
}
]
},
/* config.module.rule(‘less’) */
{
test: /.less$/,
oneOf: [
/* config.module.rule(‘less’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘less’).oneOf(‘vue-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘less’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘less’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘less’).oneOf(‘vue-modules’).use(‘less-loader’) */
{
loader: ‘less-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘less’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘less’).oneOf(‘vue’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘less’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘less’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘less’).oneOf(‘vue’).use(‘less-loader’) */
{
loader: ‘less-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘less’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘less’).oneOf(‘normal-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘less’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘less’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘less’).oneOf(‘normal-modules’).use(‘less-loader’) */
{
loader: ‘less-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘less’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘less’).oneOf(‘normal’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘less’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘less’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘less’).oneOf(‘normal’).use(‘less-loader’) */
{
loader: ‘less-loader’,
options: {
sourceMap: false
}
}
]
}
]
},
/* config.module.rule(‘stylus’) */
{
test: /.styl(us)?$/,
oneOf: [
/* config.module.rule(‘stylus’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘stylus’).oneOf(‘vue-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue-modules’).use(‘stylus-loader’) */
{
loader: ‘stylus-loader’,
options: {
sourceMap: false,
preferPathResolver: ‘webpack’
}
}
]
},
/* config.module.rule(‘stylus’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘stylus’).oneOf(‘vue’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue’).use(‘stylus-loader’) */
{
loader: ‘stylus-loader’,
options: {
sourceMap: false,
preferPathResolver: ‘webpack’
}
}
]
},
/* config.module.rule(‘stylus’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘stylus’).oneOf(‘normal-modules’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal-modules’).use(‘stylus-loader’) */
{
loader: ‘stylus-loader’,
options: {
sourceMap: false,
preferPathResolver: ‘webpack’
}
}
]
},
/* config.module.rule(‘stylus’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘stylus’).oneOf(‘normal’).use(‘vue-style-loader’) */
{
loader: ‘//node_modules/vue-style-loader/index.js’,
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal’).use(‘stylus-loader’) */
{
loader: ‘stylus-loader’,
options: {
sourceMap: false,
preferPathResolver: ‘webpack’
}
}
]
}
]
},
/* config.module.rule(‘js’) */
{
test: /.m?jsx?$/,
exclude: [
function () { /* omitted long function */
}
],
use: [
/* config.module.rule(‘js’).use(‘cache-loader’) */
{
loader: ‘//node_modules/cache-loader/dist/cjs.js’,
options: {
cacheDirectory: ‘//node_modules/.cache/babel-loader’,
cacheIdentifier: ‘5b579faa’
}
},
/* config.module.rule(‘js’).use(‘babel-loader’) */
{
loader: ‘//node_modules/babel-loader/lib/index.js’
}
]
},
/* config.module.rule(‘eslint’) */
{
enforce: ‘pre’,
test: /.(vue|(j|t)sx?)$/,
exclude: [
/node_modules/,
‘//node_modules/@vue/cli-service/lib’
],
use: [
/* config.module.rule(‘eslint’).use(‘eslint-loader’) */
{
loader: ‘//node_modules/eslint-loader/index.js’,
options: {
extensions: [
‘.js’,
‘.jsx’,
‘.vue’
],
cache: true,
cacheIdentifier: ‘5359bed4’,
emitWarning: false,
emitError: false,
eslintPath: ‘//node_modules/eslint’,
formatter: undefined
}
}
]
}
]
},
// 代码分割
optimization: {
splitChunks: {
cacheGroups: {
// node_modules被打包成chunk-vendors
vendors: {
name: ‘chunk-vendors’,
test: /[\/]node_modules[\/]/,
priority: -10,
chunks: ‘initial’
},
// 其他模块如果被引用超过两次,被打包成chunk-common
common: {
name: ‘chunk-common’,
minChunks: 2,
priority: -20,
chunks: ‘initial’,
reuseExistingChunk: true
}
}
},
// 压缩选项
minimizer: [
/* config.optimization.minimizer(‘terser’) */
new TerserPlugin(
{
terserOptions: {
compress: {
arrows: false,
collapse_vars: false,
comparisons: false,
computed_props: false,
hoist_funs: false,
hoist_props: false,
hoist_vars: false,
inline: false,
loops: false,
negate_iife: false,
properties: false,
reduce_funcs: false,
reduce_vars: false,
switches: false,
toplevel: false,
typeofs: false,
booleans: true,
if_return: true,
sequences: true,
unused: true,
conditionals: true,
dead_code: true,
evaluate: true
},
mangle: {
safari10: true
}
},
sourceMap: true,
cache: true,
parallel: true,
extractComments: false
}
)
]
},
// 插件
plugins: [
/* config.plugin(‘vue-loader’) */
new VueLoaderPlugin(),
/* config.plugin(‘define’) */
new DefinePlugin(
{
‘process.env’: {
NODE_ENV: ‘“development”’,
BASE_URL: ‘“/”’
}
}
),
/* config.plugin(‘case-sensitive-paths’) */
new CaseSensitivePathsPlugin(),
/* config.plugin(‘friendly-errors’) */
new FriendlyErrorsWebpackPlugin(
{
additionalTransformers: [
function () { /* omitted long function */
}
],
additionalFormatters: [
function () { /* omitted long function */
}
]
}
),
/* config.plugin(‘html’) */
new HtmlWebpackPlugin(
{
title: ‘02.vue_cli’,
templateParameters: function () { /* omitted long function */
},
template: ‘//public/index.html’
}
),
/* config.plugin(‘preload’) */
// 预加载,提高资源下载权重,优先下载
new PreloadPlugin(
{
rel: ‘preload’,
include: ‘initial’,
fileBlacklist: [
/.map$/,
/hot-update.js$/
]
}
),
/* config.plugin(‘prefetch’) */
// 预加载,空闲时刻加载
new PreloadPlugin(
{
rel: ‘prefetch’,
include: ‘asyncChunks’
}
),
/* config.plugin(‘copy’) */
new CopyPlugin(
[
{
from: ‘//public’,
to: ‘//dist’,
toType: ‘dir’,
ignore: [
‘.DS_Store’,
{
glob: ‘index.html’,
matchBase: false
}
]
}
]
)
],
// 打包入口
entry: {
app: [
‘./src/main.js’
]
}
}
生产环境配置文件
webpack.dev.js
module.exports = {
mode: ‘production’,
context: ‘/’,
// 错误提示
devtool: ‘source-map’,
node: {
setImmediate: false,
process: ‘mock’,
dgram: ‘empty’,
fs: ‘empty’,
net: ‘empty’,
tls: ‘empty’,
child_process: ‘empty’
},
// 使用contenthash做缓存
output: {
path: ‘//dist’,
filename: ‘js/[name].[contenthash:8].js’,
publicPath: ‘/’,
chunkFilename: ‘js/[name].[contenthash:8].js’
},
resolve: {
alias: {
‘@’: ‘//src’,
vue$: ‘vue/dist/vue.runtime.esm.js’
},
extensions: [
‘.mjs’,
‘.js’,
‘.jsx’,
‘.vue’,
‘.json’,
‘.wasm’
],
modules: [
‘node_modules’,
‘//node_modules’,
‘//node_modules/@vue/cli-service/node_modules’
],
plugins: [
/* config.resolve.plugin(‘pnp’) */
{}
]
},
resolveLoader: {
modules: [
‘//node_modules/@vue/cli-plugin-babel/node_modules’,
‘node_modules’,
‘//node_modules’,
‘//node_modules/@vue/cli-service/node_modules’
],
plugins: [
/* config.resolve.plugin(‘pnp-loaders’) */
{}
]
},
module: {
noParse: /^(vue|vue-router|vuex|vuex-router-sync)$/,
rules: [
/* config.module.rule(‘vue’) */
{
test: /.vue$/,
use: [
/* config.module.rule(‘vue’).use(‘cache-loader’) */
{
loader: ‘//node_modules/cache-loader/dist/cjs.js’,
options: {
cacheDirectory: ‘//node_modules/.cache/vue-loader’,
cacheIdentifier: ‘b478494a’
}
},
/* config.module.rule(‘vue’).use(‘vue-loader’) */
{
loader: ‘//node_modules/vue-loader/lib/index.js’,
options: {
compilerOptions: {
whitespace: ‘condense’
},
cacheDirectory: ‘//node_modules/.cache/vue-loader’,
cacheIdentifier: ‘b478494a’
}
}
]
},
/* config.module.rule(‘images’) */
{
test: /.(png|jpe?g|gif|webp)(?.*)?$/,
use: [
/* config.module.rule(‘images’).use(‘url-loader’) */
{
loader: ‘//node_modules/url-loader/dist/cjs.js’,
options: {
limit: 4096,
fallback: {
loader: ‘//node_modules/file-loader/dist/cjs.js’,
options: {
name: ‘img/[name].[hash:8].[ext]’
}
}
}
}
]
},
/* config.module.rule(‘svg’) */
{
test: /.(svg)(?.*)?$/,
use: [
/* config.module.rule(‘svg’).use(‘file-loader’) */
{
loader: ‘//node_modules/file-loader/dist/cjs.js’,
options: {
name: ‘img/[name].[hash:8].[ext]’
}
}
]
},
/* config.module.rule(‘media’) */
{
test: /.(mp4|webm|ogg|mp3|wav|flac|aac)(?.*)?$/,
use: [
/* config.module.rule(‘media’).use(‘url-loader’) */
{
loader: ‘//node_modules/url-loader/dist/cjs.js’,
options: {
limit: 4096,
fallback: {
loader: ‘//node_modules/file-loader/dist/cjs.js’,
options: {
name: ‘media/[name].[hash:8].[ext]’
}
}
}
}
]
},
/* config.module.rule(‘fonts’) */
{
test: /.(woff2?|eot|ttf|otf)(?.*)?$/i,
use: [
/* config.module.rule(‘fonts’).use(‘url-loader’) */
{
loader: ‘//node_modules/url-loader/dist/cjs.js’,
options: {
limit: 4096,
fallback: {
loader: ‘//node_modules/file-loader/dist/cjs.js’,
options: {
name: ‘fonts/[name].[hash:8].[ext]’
}
}
}
}
]
},
/* config.module.rule(‘pug’) */
{
test: /.pug$/,
oneOf: [
/* config.module.rule(‘pug’).oneOf(‘pug-vue’) */
{
resourceQuery: /vue/,
use: [
/* config.module.rule(‘pug’).oneOf(‘pug-vue’).use(‘pug-plain-loader’) */
{
loader: ‘pug-plain-loader’
}
]
},
/* config.module.rule(‘pug’).oneOf(‘pug-template’) */
{
use: [
/* config.module.rule(‘pug’).oneOf(‘pug-template’).use(‘raw’) */
{
loader: ‘raw-loader’
},
/* config.module.rule(‘pug’).oneOf(‘pug-template’).use(‘pug-plain-loader’) */
{
loader: ‘pug-plain-loader’
}
]
}
]
},
/* config.module.rule(‘css’) */
{
test: /.css$/,
oneOf: [
/* config.module.rule(‘css’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘css’).oneOf(‘vue-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘css’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘css’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘css’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘css’).oneOf(‘vue’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘css’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘css’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘css’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘css’).oneOf(‘normal-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘css’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘css’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘css’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘css’).oneOf(‘normal’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘css’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘css’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
}
]
},
/* config.module.rule(‘postcss’) */
{
test: /.p(ost)?css$/,
oneOf: [
/* config.module.rule(‘postcss’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘postcss’).oneOf(‘vue-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘postcss’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘postcss’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘postcss’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘postcss’).oneOf(‘vue’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘postcss’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘postcss’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘postcss’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘postcss’).oneOf(‘normal-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘postcss’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘postcss’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
},
/* config.module.rule(‘postcss’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘postcss’).oneOf(‘normal’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘postcss’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘postcss’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
}
]
}
]
},
/* config.module.rule(‘scss’) */
{
test: /.scss$/,
oneOf: [
/* config.module.rule(‘scss’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘scss’).oneOf(‘vue-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘scss’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘scss’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘scss’).oneOf(‘vue-modules’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘scss’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘scss’).oneOf(‘vue’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘scss’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘scss’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘scss’).oneOf(‘vue’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘scss’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘scss’).oneOf(‘normal-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘scss’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘scss’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘scss’).oneOf(‘normal-modules’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘scss’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘scss’).oneOf(‘normal’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘scss’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘scss’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘scss’).oneOf(‘normal’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false
}
}
]
}
]
},
/* config.module.rule(‘sass’) */
{
test: /.sass$/,
oneOf: [
/* config.module.rule(‘sass’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘sass’).oneOf(‘vue-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘sass’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘sass’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘sass’).oneOf(‘vue-modules’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false,
sassOptions: {
indentedSyntax: true
}
}
}
]
},
/* config.module.rule(‘sass’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘sass’).oneOf(‘vue’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘sass’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘sass’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘sass’).oneOf(‘vue’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false,
sassOptions: {
indentedSyntax: true
}
}
}
]
},
/* config.module.rule(‘sass’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘sass’).oneOf(‘normal-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘sass’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘sass’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘sass’).oneOf(‘normal-modules’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false,
sassOptions: {
indentedSyntax: true
}
}
}
]
},
/* config.module.rule(‘sass’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘sass’).oneOf(‘normal’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘sass’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘sass’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘sass’).oneOf(‘normal’).use(‘sass-loader’) */
{
loader: ‘sass-loader’,
options: {
sourceMap: false,
sassOptions: {
indentedSyntax: true
}
}
}
]
}
]
},
/* config.module.rule(‘less’) */
{
test: /.less$/,
oneOf: [
/* config.module.rule(‘less’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘less’).oneOf(‘vue-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘less’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘less’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘less’).oneOf(‘vue-modules’).use(‘less-loader’) */
{
loader: ‘less-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘less’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘less’).oneOf(‘vue’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘less’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘less’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘less’).oneOf(‘vue’).use(‘less-loader’) */
{
loader: ‘less-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘less’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘less’).oneOf(‘normal-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘less’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘less’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘less’).oneOf(‘normal-modules’).use(‘less-loader’) */
{
loader: ‘less-loader’,
options: {
sourceMap: false
}
}
]
},
/* config.module.rule(‘less’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘less’).oneOf(‘normal’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘less’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘less’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘less’).oneOf(‘normal’).use(‘less-loader’) */
{
loader: ‘less-loader’,
options: {
sourceMap: false
}
}
]
}
]
},
/* config.module.rule(‘stylus’) */
{
test: /.styl(us)?$/,
oneOf: [
/* config.module.rule(‘stylus’).oneOf(‘vue-modules’) */
{
resourceQuery: /module/,
use: [
/* config.module.rule(‘stylus’).oneOf(‘vue-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue-modules’).use(‘stylus-loader’) */
{
loader: ‘stylus-loader’,
options: {
sourceMap: false,
preferPathResolver: ‘webpack’
}
}
]
},
/* config.module.rule(‘stylus’).oneOf(‘vue’) */
{
resourceQuery: /?vue/,
use: [
/* config.module.rule(‘stylus’).oneOf(‘vue’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘stylus’).oneOf(‘vue’).use(‘stylus-loader’) */
{
loader: ‘stylus-loader’,
options: {
sourceMap: false,
preferPathResolver: ‘webpack’
}
}
]
},
/* config.module.rule(‘stylus’).oneOf(‘normal-modules’) */
{
test: /.module.\w+$/,
use: [
/* config.module.rule(‘stylus’).oneOf(‘normal-modules’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal-modules’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2,
modules: {
localIdentName: ‘[name][local][hash:base64:5]’
}
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal-modules’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal-modules’).use(‘stylus-loader’) */
{
loader: ‘stylus-loader’,
options: {
sourceMap: false,
preferPathResolver: ‘webpack’
}
}
]
},
/* config.module.rule(‘stylus’).oneOf(‘normal’) */
{
use: [
/* config.module.rule(‘stylus’).oneOf(‘normal’).use(‘extract-css-loader’) */
{
loader: ‘//node_modules/mini-css-extract-plugin/dist/loader.js’,
options: {
hmr: false,
publicPath: ‘…/’
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal’).use(‘css-loader’) */
{
loader: ‘//node_modules/css-loader/dist/cjs.js’,
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal’).use(‘postcss-loader’) */
{
loader: ‘//node_modules/postcss-loader/src/index.js’,
options: {
sourceMap: false,
plugins: [
function () { /* omitted long function */
}
]
}
},
/* config.module.rule(‘stylus’).oneOf(‘normal’).use(‘stylus-loader’) */
{
loader: ‘stylus-loader’,
options: {
sourceMap: false,
preferPathResolver: ‘webpack’
}
}
]
}
]
},
/* config.module.rule(‘js’) */
{
test: /.m?jsx?$/,
exclude: [
function () { /* omitted long function */
}
],
use: [
/* config.module.rule(‘js’).use(‘cache-loader’) */
{
loader: ‘//node_modules/cache-loader/dist/cjs.js’,
options: {
cacheDirectory: ‘//node_modules/.cache/babel-loader’,
cacheIdentifier: ‘bf6c8644’
}
},
/* config.module.rule(‘js’).use(‘thread-loader’) */
{
// 多线程打包
loader: ‘//node_modules/thread-loader/dist/cjs.js’
},
/* config.module.rule(‘js’).use(‘babel-loader’) */
{
loader: ‘//node_modules/babel-loader/lib/index.js’
}
]
},
/* config.module.rule(‘eslint’) */
{
enforce: ‘pre’,
test: /.(vue|(j|t)sx?)$/,
exclude: [
/node_modules/,
‘//node_modules/@vue/cli-service/lib’
],
use: [
/* config.module.rule(‘eslint’).use(‘eslint-loader’) */
{
loader: ‘//node_modules/eslint-loader/index.js’,
options: {
extensions: [
‘.js’,
‘.jsx’,
‘.vue’
],
cache: true,
cacheIdentifier: ‘6340a568’,
emitWarning: false,
emitError: false,
eslintPath: ‘//node_modules/eslint’,
formatter: undefined
}
}
]
}
]
},
optimization: {
splitChunks: {
cacheGroups: {
vendors: {
name: ‘chunk-vendors’,
test: /[\/]node_modules[\/]/,
priority: -10,
chunks: ‘initial’
},
common: {
name: ‘chunk-common’,
minChunks: 2,
priority: -20,
chunks: ‘initial’,
reuseExistingChunk: true
}
}
},
minimizer: [
/* config.optimization.minimizer(‘terser’) */
new TerserPlugin(
{
terserOptions: {
compress: {
arrows: false,
collapse_vars: false,
comparisons: false,
computed_props: false,
hoist_funs: false,
hoist_props: false,
hoist_vars: false,
inline: false,
loops: false,
negate_iife: false,
properties: false,
reduce_funcs: false,
reduce_vars: false,
switches: false,
toplevel: false,
typeofs: false,
booleans: true,
if_return: true,
sequences: true,
unused: true,
conditionals: true,
dead_code: true,
evaluate: true
},
mangle: {
safari10: true
}
},
sourceMap: true,
cache: true,
parallel: true,
extractComments: false
}
)
]
},
plugins: [
/* config.plugin(‘vue-loader’) */
new VueLoaderPlugin(),
/* config.plugin(‘define’) */
new DefinePlugin(
{
‘process.env’: {
NODE_ENV: ‘“production”’,
BASE_URL: ‘“/”’
}
}
),
/* config.plugin(‘case-sensitive-paths’) */
new CaseSensitivePathsPlugin(),
/* config.plugin(‘friendly-errors’) */
new FriendlyErrorsWebpackPlugin(
{
additionalTransformers: [
function () { /* omitted long function */
}
],
additionalFormatters: [
function () { /* omitted long function */
}
]
}
),
/* config.plugin(‘extract-css’) */
new MiniCssExtractPlugin(
{
filename: ‘css/[name].[contenthash:8].css’,
chunkFilename: ‘css/[name].[contenthash:8].css’
}
),
/* config.plugin(‘optimize-css’) */
new OptimizeCssnanoPlugin(
{
sourceMap: false,
cssnanoOptions: {
preset: [
‘default’,
{
mergeLonghand: false,
cssDeclarationSorter: false
}
]
}
}
),
/* config.plugin(‘hash-module-ids’) */
new HashedModuleIdsPlugin(
{
hashDigest: ‘hex’
}
),
/* config.plugin(‘named-chunks’) */
new NamedChunksPlugin(
function () { /* omitted long function */
}
),
/* config.plugin(‘html’) */
new HtmlWebpackPlugin(
{
title: ‘02.vue_cli’,
templateParameters: function () { /* omitted long function */
},
minify: {
removeComments: true,
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeScriptTypeAttributes: true
},
template: ‘//public/index.html’
}
),
/* config.plugin(‘preload’) */
new PreloadPlugin(
{
rel: ‘preload’,
include: ‘initial’,
fileBlacklist: [
/.map$/,
/hot-update.js$/
]
}
),
/* config.plugin(‘prefetch’) */
new PreloadPlugin(
{
rel: ‘prefetch’,
include: ‘asyncChunks’
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)
最后
整理面试题,不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。
《前端基础面试题》,《前端校招面试题精编解析大全》,《前端面试题宝典》,《前端面试题:常用算法》PDF完整版点击这里即可获取!!!!
rule(‘stylus’).oneOf(‘normal’).use(‘stylus-loader’) */
{
loader: ‘stylus-loader’,
options: {
sourceMap: false,
preferPathResolver: ‘webpack’
}
}
]
}
]
},
/* config.module.rule(‘js’) */
{
test: /.m?jsx?$/,
exclude: [
function () { /* omitted long function */
}
],
use: [
/* config.module.rule(‘js’).use(‘cache-loader’) */
{
loader: ‘//node_modules/cache-loader/dist/cjs.js’,
options: {
cacheDirectory: ‘//node_modules/.cache/babel-loader’,
cacheIdentifier: ‘bf6c8644’
}
},
/* config.module.rule(‘js’).use(‘thread-loader’) */
{
// 多线程打包
loader: ‘//node_modules/thread-loader/dist/cjs.js’
},
/* config.module.rule(‘js’).use(‘babel-loader’) */
{
loader: ‘//node_modules/babel-loader/lib/index.js’
}
]
},
/* config.module.rule(‘eslint’) */
{
enforce: ‘pre’,
test: /.(vue|(j|t)sx?)$/,
exclude: [
/node_modules/,
‘//node_modules/@vue/cli-service/lib’
],
use: [
/* config.module.rule(‘eslint’).use(‘eslint-loader’) */
{
loader: ‘//node_modules/eslint-loader/index.js’,
options: {
extensions: [
‘.js’,
‘.jsx’,
‘.vue’
],
cache: true,
cacheIdentifier: ‘6340a568’,
emitWarning: false,
emitError: false,
eslintPath: ‘//node_modules/eslint’,
formatter: undefined
}
}
]
}
]
},
optimization: {
splitChunks: {
cacheGroups: {
vendors: {
name: ‘chunk-vendors’,
test: /[\/]node_modules[\/]/,
priority: -10,
chunks: ‘initial’
},
common: {
name: ‘chunk-common’,
minChunks: 2,
priority: -20,
chunks: ‘initial’,
reuseExistingChunk: true
}
}
},
minimizer: [
/* config.optimization.minimizer(‘terser’) */
new TerserPlugin(
{
terserOptions: {
compress: {
arrows: false,
collapse_vars: false,
comparisons: false,
computed_props: false,
hoist_funs: false,
hoist_props: false,
hoist_vars: false,
inline: false,
loops: false,
negate_iife: false,
properties: false,
reduce_funcs: false,
reduce_vars: false,
switches: false,
toplevel: false,
typeofs: false,
booleans: true,
if_return: true,
sequences: true,
unused: true,
conditionals: true,
dead_code: true,
evaluate: true
},
mangle: {
safari10: true
}
},
sourceMap: true,
cache: true,
parallel: true,
extractComments: false
}
)
]
},
plugins: [
/* config.plugin(‘vue-loader’) */
new VueLoaderPlugin(),
/* config.plugin(‘define’) */
new DefinePlugin(
{
‘process.env’: {
NODE_ENV: ‘“production”’,
BASE_URL: ‘“/”’
}
}
),
/* config.plugin(‘case-sensitive-paths’) */
new CaseSensitivePathsPlugin(),
/* config.plugin(‘friendly-errors’) */
new FriendlyErrorsWebpackPlugin(
{
additionalTransformers: [
function () { /* omitted long function */
}
],
additionalFormatters: [
function () { /* omitted long function */
}
]
}
),
/* config.plugin(‘extract-css’) */
new MiniCssExtractPlugin(
{
filename: ‘css/[name].[contenthash:8].css’,
chunkFilename: ‘css/[name].[contenthash:8].css’
}
),
/* config.plugin(‘optimize-css’) */
new OptimizeCssnanoPlugin(
{
sourceMap: false,
cssnanoOptions: {
preset: [
‘default’,
{
mergeLonghand: false,
cssDeclarationSorter: false
}
]
}
}
),
/* config.plugin(‘hash-module-ids’) */
new HashedModuleIdsPlugin(
{
hashDigest: ‘hex’
}
),
/* config.plugin(‘named-chunks’) */
new NamedChunksPlugin(
function () { /* omitted long function */
}
),
/* config.plugin(‘html’) */
new HtmlWebpackPlugin(
{
title: ‘02.vue_cli’,
templateParameters: function () { /* omitted long function */
},
minify: {
removeComments: true,
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeScriptTypeAttributes: true
},
template: ‘//public/index.html’
}
),
/* config.plugin(‘preload’) */
new PreloadPlugin(
{
rel: ‘preload’,
include: ‘initial’,
fileBlacklist: [
/.map$/,
/hot-update.js$/
]
}
),
/* config.plugin(‘prefetch’) */
new PreloadPlugin(
{
rel: ‘prefetch’,
include: ‘asyncChunks’
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-sWFADaqh-1711653698245)]
[外链图片转存中…(img-9o3yTJwX-1711653698246)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
[外链图片转存中…(img-km0WRO21-1711653698246)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)
最后
整理面试题,不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。
《前端基础面试题》,《前端校招面试题精编解析大全》,《前端面试题宝典》,《前端面试题:常用算法》PDF完整版点击这里即可获取!!!!
[外链图片转存中…(img-wF5bkOYu-1711653698247)]
[外链图片转存中…(img-vaDTZwZz-1711653698247)]
[外链图片转存中…(img-5EokDQ6G-1711653698247)]
精彩链接
发表评论