npm install -D webpack-dev-server
const path = require('path')
//
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 导入loader插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')
// 用于热部署
const webpack = require('webpack')
module.exports = {
// 模式
mode: 'development',
// 打包的入口
entry: './src/main.js',
// 打包的出口
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
// loader插件配置
module: {
rules: [
// 配置解析vue文件
{
test: /\.vue$/,
loader: 'vue-loader'
},
// {
// test: /\.(jpg|jpeg|png|svg)$/,
// loader: 'file-loader',
// options: { // 正常打包后,会把匹配到图片文件复制到dist下,并且以他的hash值作为名字,可使用占位符改变名字
// name: '[name].[ext]', // 占位符:[name]表示使用源文件名,[ext]使用原来扩展名
// // limit:2048 // 当文件小于 2048byte 时, 以 base64 打包到 js 中, 当文件大于 2048byte 时, 使用 file-loader 打包
// }
// },
// 上下两个好像不可以同时存在
{
test: /\.(jpg|jpeg|png|svg|gif)$/,
loader: 'url-loader',
options: {
name: '[name].[ext]',
limit: 2048
}
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader'] // 执行顺序是从右到左, 解决文件之间的依赖关系, 把所有的 css 文件打包成一个文件,将 css-loader 打包完成后生成的文件挂载到页面的 head 标签的 style 中
},
{
test: /\.styl(us)?$/,
use: ['style-loader', 'css-loader', 'stylus-loader']
},
// 处理vue文件中的style,其实也是只使用上面这里就可以了
// {
// test: /\.styl(us)?$/,
// use: ['vue-style-loader', 'css-loader', 'stylus-loader']
// }
]
},
plugins: [
// 一定要引入此插件
new VueLoaderPlugin(),
new HtmlWebpackPlugin({
template: './src/index.html'
}),
// 使用热部署插件
new webpack.HotModuleReplacementPlugin()
],
// 使用别名
// 作用就是:webpack打包会生成三个文件
/*
runtime only 的文件 vue.common.js
compiler only 的文件 compiler.js
runtime + compiler 的文件 vue.js
*/
// 而默认导出的是 vue.common.js,正常是 runtime + compiler 的文件 vue.js ,下面就是解决办法
resolve: {
alias: {
'vue': 'vue/dist/vue.js'
}
},
// devServer配置
devServer: {
// 指定服务器根目录
contentBase: './dist',
// 自动打开浏览器
open: true,
port: 9000,
hot:true // 启用热部署
},
}
SourceMap
npm install -D webpack-merge
webpack.base.js
// 使用node的path模块
const path = require('path')
// 引入vue-loader插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')
// 导入html-webpack-plugin
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 导入clean-webpack-plugin
const {
CleanWebpackPlugin } = require('clean-webpack-plugin')
module.exports = {
// 打包的入口
entry: './src/main.js',
// 插件
plugins: [
// 请确保引入这个插件!
new VueLoaderPlugin(),
new HtmlWebpackPlugin({
template: './src/index.html'
}),
new CleanWebpackPlugin()
],
// 打包的出口
output: {
filename: 'app.js',
path: path.resolve(__dirname,'../dist')
},
// 打包规则
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader'
},
{
test: /\.(jpg|jpeg|png|svg)$/,
loader: 'url-loader',
options: {
name: '[name].[ext]',
limit:2048
}
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{
test: /\.styl(us)?$/,
use: ['style-loader', 'css-loader', 'postcss-loader', 'stylus-loader']
}
]
},
resolve: {
alias: {
vue: 'vue/dist/vue.js',
'@': path.resolve(__dirname, '../src'), // 配置别名,使用@就相当于使用src文件
'styles':path.resolve(__dirname,'../src/assets/styles') // 除了src外的文件做别名的时候,使用它的时候要这样 '~styles/aa.css'
}
}
}
webpack.dev.js
// 导入webpack
const webpack = require('webpack')
const {
merge} = require('webpack-merge')
const baseConfig = require('./webpack.base.js')
const devConfig = {
// 模式
mode: 'development',
devtool: 'cheap-module-eval-source-map',
devServer: {
// 指定服务器根目录
contentBase: './dist',
// 自动打开浏览器
open: true,
// 启用热模块替换
hot: true
},
// 插件
plugins: [new webpack.HotModuleReplacementPlugin()]
}
module.exports = merge(baseConfig, devConfig)
webpack.prod.js
const {
merge} = require('webpack-merge')
const baseConfig = require('./webpack.base.js')
const prodConfig = {
// 模式
mode: 'production'
}
module.exports = merge(baseConfig, prodConfig)
在项目中, 有时我们可能会使用 ES6 的语法, 而这些内容在低版本的浏览器上是不支持的. 往往不能正常解析.
一般, 我们会使用 babel 将 ES6 编译成 ES5 的语法.
babel 的内容是非常丰富的. 我们这里只是演示一些最基本的配置和用法
npm install -D babel-loader @babel/core
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
}
npm install @babel/preset-env -D
创建一个文件.babelrc再根目录,内容下面
{
"presets": ["@babel/preset-env"] }