一般来说, 一个前端项目除了 js 文件外, 还有一些常用的文件, 如
对于这些文件, webpack 都不会打包, 需要我们安装对应的 loader 帮助 webpack 打包
使用插件file-loader来打包图片文件
安装
npm install -D file-loader
const path = require('path')
// 导入loader插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')
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]使用原来扩展名
}
},
{
test: /\.(jpg|jpeg|png|svg)$/,
loader: 'url-loader',
options: {
name: '[name].[ext]',
limit: 2048 // limit: 当文件小于 2048byte 时, 以 base64 打包到 js 中, 当文件大于 2048byte 时, 使用 file-loader 打包
}
}
]
},
plugins: [
// 一定要引入此插件
new VueLoaderPlugin()
],
// 使用别名
// 作用就是: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'
}
}
}
url-loader: 功能类似于 file-loader,但是在文件大小(单位 byte)低于指定的限制时,可以返回一个 DataURL。
npm install -D file-loader url-loader
分别用到css-loader和style-loader
const path = require('path')
// 导入loader插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')
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]使用原来扩展名
}
},
{
test: /\.(jpg|jpeg|png|svg)$/,
loader: 'url-loader',
options: {
name: '[name].[ext]',
limit: 2048 // limit: 当文件小于 2048byte 时, 以 base64 打包到 js 中, 当文件大于 2048byte 时, 使用 file-loader 打包
}
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader'] // 执行顺序是从右到左, 解决文件之间的依赖关系, 把所有的 css 文件打包成一个文件,将 css-loader 打包完成后生成的文件挂载到页面的 head 标签的 style 中
}
]
},
plugins: [
// 一定要引入此插件
new VueLoaderPlugin()
],
// 使用别名
// 作用就是: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'
}
}
}
npm install -D stylus stylus-loader
const path = require('path')
// 导入loader插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')
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)$/,
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']
}
]
},
plugins: [
// 一定要引入此插件
new VueLoaderPlugin()
],
// 使用别名
// 作用就是: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'
}
}
}
处理 vue 文件中的 stylus
const path = require('path')
// 导入loader插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')
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()
],
// 使用别名
// 作用就是: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'
}
}
}
这个插件就是用来生成index.html到dist里面的
// 引入
const HtmlWebpackPlugin = require('html-webpack-plugin')
plugins: [
// 一定要引入此插件
new VueLoaderPlugin(),
// 使用并且以src里面的index作为模板才行,相当于复制一个
new HtmlWebpackPlugin({
template: './src/index.html'
})
],