1.webpack配置項目一般來說會分三個文件(base.config.js,dev.config.js,prod.config.js)
**
base.config.js是基本配置,是提煉出生產(chǎn)環(huán)境和開發(fā)環(huán)境的共同之處,
dev.config.js是開發(fā)環(huán)境的配置。
prod.config.js是打包環(huán)境的配置
**
module.exports = {
entry: {
app: './src/main.js'
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
'src': path.resolve(__dirname, '../src'),
'assets': path.resolve(__dirname, '../src/assets'),
'components': path.resolve(__dirname, '../src/components'),
'views': path.resolve(__dirname, '../src/views'),
'styles': path.resolve(__dirname, '../src/styles'),
'api': path.resolve(__dirname, '../src/api'),
'utils': path.resolve(__dirname, '../src/utils'),
'store': path.resolve(__dirname, '../src/store'),
'router': path.resolve(__dirname, '../src/router'),
'mock': path.resolve(__dirname, '../src/mock'),
'vendor': path.resolve(__dirname, '../src/vendor'),
'static': path.resolve(__dirname, '../static')
}
},
module: {
rules: [
{
test: /\.(js|vue)$/,
loader: 'eslint-loader',
enforce: "pre",
include: [resolve('src'), resolve('test')],
options: {
formatter: require('eslint-friendly-formatter')
}
},
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader?cacheDirectory',
include: [resolve('src'), resolve('test')]
},
{
test: /\.svg$/,
loader: 'svg-sprite-loader',
include: [resolve('src/icons')],
options: {
symbolId: 'icon-[name]'
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
exclude: [resolve('src/icons')],
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
},
//注入全局mixin
// sassResources: path.join(__dirname, '../src/styles/mixin.scss'),
// sassLoader: {
// data: path.join(__dirname, '../src/styles/index.scss')
// },
}
上面兩張圖大概就是base.config.js基本配置。下面一個一個講解其作用:
1.entry
entry: {
app: './src/main.js'
}
webpack的entry是引入js的入口,相當(dāng)于一個(main)主函數(shù)的意思,表示程序是從這里開始的,(記得也可以引入多個文件)
2.output
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath
}
output是文件打包后,生成的文件放到那個文件目錄下面,output.publicPath 表示導(dǎo)出文件的目錄,output.path表示到處文件的路徑,output.filename表示導(dǎo)出文件的名稱。
3.resolve字段
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
'src': path.resolve(__dirname, '../src'),
'assets': path.resolve(__dirname, '../src/assets'),
'components': path.resolve(__dirname, '../src/components'),
'views': path.resolve(__dirname, '../src/views'),
'styles': path.resolve(__dirname, '../src/styles'),
'api': path.resolve(__dirname, '../src/api'),
'utils': path.resolve(__dirname, '../src/utils'),
'store': path.resolve(__dirname, '../src/store'),
'router': path.resolve(__dirname, '../src/router'),
'mock': path.resolve(__dirname, '../src/mock'),
'vendor': path.resolve(__dirname, '../src/vendor'),
'static': path.resolve(__dirname, '../static')
}
},
extensions表示擴(kuò)展的意思,這個的作用是當(dāng)我們后面引入(import a form 'a.js')可以寫成(import a form 'a');
上面表示如果文件擴(kuò)展名為,js,vue,json,可以省略其擴(kuò)展名
alias 表示別名,沒引入別名 我們這引入js文件(import a form '.src/components/head.vue'),這個路徑層級比較復(fù)雜的話,那么form ""就會很長很麻煩。
引入別名后,引入js(import a form 'components/head.vue'),這里的"components"是別名,相當(dāng)于path.resolve(__dirname, '../src/components');
4.module.rules
rules是一個數(shù)組,存放加載器;
常用加載器:(eslint-loader,vue-loader,babel-loader,svg-sprite-loader,url-loader);
關(guān)于loader的使用可以使用npm官網(wǎng)查看其用法;