- 上package.json
"dependencies": {
"vue": "^2.6.10"
},
"devDependencies": {
"@babel/core": "^7.5.0",
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@babel/preset-env": "^7.5.2",
"babel-loader": "^8.0.6",
"clean-webpack-plugin": "^3.0.0",
"css-loader": "^3.0.0",
"html-webpack-plugin": "^3.2.0",
"mini-css-extract-plugin": "^0.7.0",
"url-loader": "^2.0.1",
"vue-loader": "^15.7.0",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.6.10",
"webpack": "^4.35.3",
"webpack-cli": "^3.3.5",
"webpack-dev-server": "^3.7.2",
"webpack-merge": "^4.2.1"
}
- webpack common
const path = require('path');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
module.exports = {
entry: {
app: './src/main.js'
},
output: {
filename: '[name].[hash].bundle.js',
path: path.join(__dirname, './dist')
},
module: {
rules: [
{
test: /\.vue$/,
use: ['vue-loader']
},
{
test: /\.(png|jpg|gif)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 8192 // 小于8192byte 打成base64
}
}
]
},
{
test: /\.js$/,
use: ['babel-loader'],
exclude: /node_modules/
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: 'template.html',
filename: 'index.html'
}),
new VueLoaderPlugin(),
new CleanWebpackPlugin()
],
resolve: { //导入的时候不用写拓展名
extensions: [' ', '.js', '.json', '.vue', '.scss', '.css']
},
}
- webpack dev
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
module.exports = merge(common, {
mode: 'development',
devtool: 'source-map',
module: {
rules: [
{
test: /\.css$/,
use: ['vue-style-loader', 'css-loader']
}
]
},
watchOptions: {
ignored: /node_modules/,
aggregateTimeout: 300, //300ms内重复保存不打包
poll: 1000 //每秒询问的文件变更的次数
},
devServer: {
inline: true,
compress: true,
host: '127.0.0.1',
port: 2500,
historyApiFallback: true
}
})
- webpack prod
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = merge(common, {
mode: 'production',
module: {
rules: [
{
test: /\.css$/,
use: [
{
loader: MiniCssExtractPlugin.loader //外链 css
},
'css-loader'
]
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: 'style.css'
})
]
})
- .babelrc
{
"plugins": ["@babel/plugin-syntax-dynamic-import"],
"presets": ["@babel/preset-env"]
}