/* 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)]

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: