文章目录
- 之前,我有提到过,当然大家肯定也都知道,Vue3.0不在有webpack.config.js的配置;但是不可避免,在项目开发中我们肯定会存在一些特殊的需求需要调整webpack, 这个时候,在Vue3.0的项目当中,我们就需要在根目录创建vue.config.js去完成webpack的一些特殊配置,默认它会被 @vue/cli-service 自动加载。
此刻,你需要创建vue.config.js文件。
- Vue CLI 官方文档:vue-cli-service 暴露了 inspect 命令用于审查解析好的 webpack 配置。那个全局的 vue 可执行程序同样提供了 inspect 命令,这个命令只是简单的把 vue-cli-service``inspect 代理到了你的项目中。 被抽象化的webpack,我们要想去理解它默认的一些配置的话是比较困难的,所以我们可以通过指令去查看。 该指令会将webpack的配置输出到output.js文件,这样方便去查看。 vue inspect > output.js
- 这个文件导出了一个包含了选项的对象: module.exports = { // 选项...} 接下来,详细介绍一些选项及配置:
- module.exports = { productionSourceMap: false, publicPath: './', outputDir: 'dist', assetsDir: 'assets', devServer: { port: 8090, host: '0.0.0.0', https: false, open: true }, // 其他配置 ... productionSourceMap:生产环境是否要生成 sourceMap publicPath:部署应用包时的基本 URL,用法和 webpack 本身的 output.publicPath 一致 可以通过三元运算去配置dev和prod环境,publicPath: process.env.NODE_ENV === 'production' ? '/prod/' : './' outputDir: build 时输出的文件目录 assetsDir: 放置静态文件夹目录 devServer: dev环境下,webpack-dev-server 相关配置 port: 开发运行时的端口 host: 开发运行时域名,设置成'0.0.0.0',在同一个局域网下,如果你的项目在运行,同时可以通过你的http://ip:port/...访问你的项目 https: 是否启用https open:npm run serve 时是否直接打开浏览器
- 在vue.config.js如果要新增/修改 webpack 的 plugins 或者 rules , 有2种方式。
- configureWebpack 是相对比较简单的一种方式 它可以是一个对象:和webpack 本身配置方式是一致,该对象将会被webpack-merge 合并入最终的webpack 配置 它也可以是一个函数:直接在函数内部进行修改配置 configureWebpack: { rules:[], plugins: [] }configureWebpack: (config) => { // 例如,通过判断运行环境,设置mode config.mode = 'production'}
- chainWebpack 链式操作 (高级),接下来所有的配置我都会在该选项中进行配置
- ``` 配置 //导入node下面的相关包 const merge = require('webpack-merge') // base64 const path = require('path');const webpack=require('webpack')//安装postcss-px2remconst px2rem = require('postcss-px2rem')//安装postcssconst postcss = require('postcss')function resolve (dir) { return path.join(__dirname, dir)}module.exports = { // 基本路径 baseUrl: '/', // 输出文件目录 outputDir: 'dist', // eslint-loader 是否在保存的时候检查 lintOnSave: true, // use the full build with in-browser compiler? // https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only compiler: false, // webpack配置 // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md chainWebpack: () => {}, configureWebpack: () => {}, // vue-loader 配置项 // https://vue-loader.vuejs.org/en/options.html vueLoader: {}, // 生产环境是否生成 sourceMap 文件 productionSourceMap: true, // css相关配置 css: { // 是否使用css分离插件 ExtractTextPlugin extract: true, // 开启 CSS source maps? sourceMap: false, // css预设器配置项 loaderOptions: {}, // 启用 CSS modules for all css / pre-processor files. modules: false }, // use thread-loader for babel & TS in production build // enabled by default if the machine has more than 1 cores parallel: require('os').cpus().length > 1, // 是否启用dll // See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#dll-mode dll: false, // PWA 插件相关配置 // see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa pwa: {}, // webpack-dev-server 相关配置 devServer: { open: process.platform === 'darwin', host: '0.0.0.0', port: 8080, https: false, hotOnly: true, proxy: null, // 设置代理 before: app => {}, proxy: { //第三方跨域代码 } }, // 第三方插件配置 pluginOptions: { // ... }}module.exports = { lintOnSave: true, chainWebpack: (config)=>{ //在vue cli3中配置webpack目录别名alias的方式 config.resolve.alias .set('@$', resolve('src')) .set('assets',resolve('src/assets')) .set('components',resolve('src/components')) .set('common',resolve('src/common')) .set('api',resolve('src/base/api')) .set('directive',resolve('src/base/directive')) .set('filter',resolve('src/base/filter')) .set('api',resolve('src/base/api')) .set('iconfont',resolve('src/base/iconfont')) .set('js',resolve('src/base/js')) .set('css$',resolve('src/base/css')) .set('minxins',resolve('src/base/minxins')) //base64相关代码 config.module .rule('images') .test(/\.(png|jpe?g|gif|webp)(\?.*)?$/) .use('url-loader') .loader('url-loader') .tap(options => merge(options, { limit: 10000, }) ) }, }module.exports = { //配置在移动端以[640,750]方式来处理rem的基本代码体 css: { loaderOptions: { postcss: { // options here will be passed to postcss-loader plugins: [require('postcss-px2rem')({ remUnit: 75 })] }, } },}```
今天分享一下,我们项目当中的一些webpack配置,希望能给大家有所启发;只要配置多了,你就会发现其实所有的配置的都是相似的,尤其像插件的配置,都是十分相似的。
我们现在开始进入今天的主题啦~~
之前,我有提到过,当然大家肯定也都知道,Vue3.0不在有webpack.config.js的配置;但是不可避免,在项目开发中我们肯定会存在一些特殊的需求需要调整webpack, 这个时候,在Vue3.0的项目当中,我们就需要在根目录创建vue.config.js去完成webpack的一些特殊配置,默认它会被 @vue/cli-service 自动加载。
此刻,你需要创建vue.config.js文件。
Vue CLI 官方文档:vue-cli-service 暴露了 inspect 命令用于审查解析好的 webpack 配置。那个全局的 vue 可执行程序同样提供了 inspect 命令,这个命令只是简单的把 vue-cli-service``inspect 代理到了你的项目中。
被抽象化的webpack,我们要想去理解它默认的一些配置的话是比较困难的,所以我们可以通过指令去查看。
该指令会将webpack的配置输出到output.js文件,这样方便去查看。
vue inspect > output.js
这个文件导出了一个包含了选项的对象:
module.exports = {
// 选项...
}
接下来,详细介绍一些选项及配置:
module.exports = {
productionSourceMap: false,
publicPath: './',
outputDir: 'dist',
assetsDir: 'assets',
devServer: {
port: 8090,
host: '0.0.0.0',
https: false,
open: true
},
// 其他配置
...
- productionSourceMap:生产环境是否要生成
sourceMap
- publicPath:部署应用包时的基本 URL,用法和
webpack 本身的 output.publicPath 一致
- 可以通过三元运算去配置
dev和prod环境,publicPath: process.env.NODE_ENV === 'production' ? '/prod/' : './'
- outputDir:
build 时输出的文件目录
- assetsDir: 放置静态文件夹目录
- devServer: dev环境下,
webpack-dev-server 相关配置
- port: 开发运行时的端口
- host: 开发运行时域名,设置成
'0.0.0.0',在同一个局域网下,如果你的项目在运行,同时可以通过你的http://ip:port/...访问你的项目
- https: 是否启用
https
- open:
npm run serve 时是否直接打开浏览器
productionSourceMap: false,
publicPath: './',
outputDir: 'dist',
assetsDir: 'assets',
devServer: {
port: 8090,
host: '0.0.0.0',
https: false,
open: true
},
// 其他配置
...
sourceMapwebpack 本身的 output.publicPath 一致dev和prod环境,publicPath: process.env.NODE_ENV === 'production' ? '/prod/' : './'build 时输出的文件目录webpack-dev-server 相关配置'0.0.0.0',在同一个局域网下,如果你的项目在运行,同时可以通过你的http://ip:port/...访问你的项目httpsnpm run serve 时是否直接打开浏览器在vue.config.js如果要新增/修改 webpack 的 plugins 或者 rules , 有2种方式。
configureWebpack 是相对比较简单的一种方式
- 它可以是一个
对象:和webpack 本身配置方式是一致,该对象将会被webpack-merge 合并入最终的webpack 配置 - 它也可以是一个
函数:直接在函数内部进行修改配置
configureWebpack: {
rules:[],
plugins: []
}
configureWebpack: (config) => {
// 例如,通过判断运行环境,设置mode
config.mode = 'production'
}
chainWebpack 链式操作 (高级),接下来所有的配置我都会在该选项中进行配置
```
配置
//导入node下面的相关包
const merge = require('webpack-merge') // base64
const path = require('path');
const webpack=require('webpack')
//安装postcss-px2rem
const px2rem = require('postcss-px2rem')
//安装postcss
const postcss = require('postcss')
function resolve (dir) {
return path.join(__dirname, dir)
}
module.exports = {
// 基本路径
baseUrl: '/',
// 输出文件目录
outputDir: 'dist',
// eslint-loader 是否在保存的时候检查
lintOnSave: true,
// use the full build with in-browser compiler?
// https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only
compiler: false,
// webpack配置
// see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
chainWebpack: () => {},
configureWebpack: () => {},
// vue-loader 配置项
// https://vue-loader.vuejs.org/en/options.html
vueLoader: {},
// 生产环境是否生成 sourceMap 文件
productionSourceMap: true,
// css相关配置
css: {
// 是否使用css分离插件 ExtractTextPlugin
extract: true,
// 开启 CSS source maps?
sourceMap: false,
// css预设器配置项
loaderOptions: {},
// 启用 CSS modules for all css / pre-processor files.
modules: false
},
// use thread-loader for babel & TS in production build
// enabled by default if the machine has more than 1 cores
parallel: require('os').cpus().length > 1,
// 是否启用dll
// See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#dll-mode
dll: false,
// PWA 插件相关配置
// see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
pwa: {},
// webpack-dev-server 相关配置
devServer: {
open: process.platform === 'darwin',
host: '0.0.0.0',
port: 8080,
https: false,
hotOnly: true,
proxy: null, // 设置代理
before: app => {},
proxy: {
//第三方跨域代码
}
},
// 第三方插件配置
pluginOptions: {
// ...
}
}
module.exports = {
lintOnSave: true,
chainWebpack: (config)=>{
//在vue cli3中配置webpack目录别名alias的方式
config.resolve.alias
.set('@$', resolve('src'))
.set('assets',resolve('src/assets'))
.set('components',resolve('src/components'))
.set('common',resolve('src/common'))
.set('api',resolve('src/base/api'))
.set('directive',resolve('src/base/directive'))
.set('filter',resolve('src/base/filter'))
.set('api',resolve('src/base/api'))
.set('iconfont',resolve('src/base/iconfont'))
.set('js',resolve('src/base/js'))
.set('css$',resolve('src/base/css'))
.set('minxins',resolve('src/base/minxins'))
//base64相关代码
config.module
.rule('images')
.test(/\.(png|jpe?g|gif|webp)(\?.*)?$/)
.use('url-loader')
.loader('url-loader')
.tap(options =>
merge(options, {
limit: 10000,
})
)
},
}
module.exports = {
//配置在移动端以[640,750]方式来处理rem的基本代码体
css: {
loaderOptions: {
postcss: {
// options here will be passed to postcss-loader
plugins: [require('postcss-px2rem')({
remUnit: 75
})]
},
}
},
}
```
配置
//导入node下面的相关包
const merge = require('webpack-merge') // base64
const path = require('path');
const webpack=require('webpack')
//安装postcss-px2rem
const px2rem = require('postcss-px2rem')
//安装postcss
const postcss = require('postcss')
function resolve (dir) {
return path.join(__dirname, dir)
}
module.exports = {
// 基本路径
baseUrl: '/',
// 输出文件目录
outputDir: 'dist',
// eslint-loader 是否在保存的时候检查
lintOnSave: true,
// use the full build with in-browser compiler?
// https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only
compiler: false,
// webpack配置
// see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
chainWebpack: () => {},
configureWebpack: () => {},
// vue-loader 配置项
// https://vue-loader.vuejs.org/en/options.html
vueLoader: {},
// 生产环境是否生成 sourceMap 文件
productionSourceMap: true,
// css相关配置
css: {
// 是否使用css分离插件 ExtractTextPlugin
extract: true,
// 开启 CSS source maps?
sourceMap: false,
// css预设器配置项
loaderOptions: {},
// 启用 CSS modules for all css / pre-processor files.
modules: false
},
// use thread-loader for babel & TS in production build
// enabled by default if the machine has more than 1 cores
parallel: require('os').cpus().length > 1,
// 是否启用dll
// See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#dll-mode
dll: false,
// PWA 插件相关配置
// see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
pwa: {},
// webpack-dev-server 相关配置
devServer: {
open: process.platform === 'darwin',
host: '0.0.0.0',
port: 8080,
https: false,
hotOnly: true,
proxy: null, // 设置代理
before: app => {},
proxy: {
//第三方跨域代码
}
},
// 第三方插件配置
pluginOptions: {
// ...
}
}
module.exports = {
lintOnSave: true,
chainWebpack: (config)=>{
//在vue cli3中配置webpack目录别名alias的方式
config.resolve.alias
.set('@$', resolve('src'))
.set('assets',resolve('src/assets'))
.set('components',resolve('src/components'))
.set('common',resolve('src/common'))
.set('api',resolve('src/base/api'))
.set('directive',resolve('src/base/directive'))
.set('filter',resolve('src/base/filter'))
.set('api',resolve('src/base/api'))
.set('iconfont',resolve('src/base/iconfont'))
.set('js',resolve('src/base/js'))
.set('css$',resolve('src/base/css'))
.set('minxins',resolve('src/base/minxins'))
//base64相关代码
config.module
.rule('images')
.test(/\.(png|jpe?g|gif|webp)(\?.*)?$/)
.use('url-loader')
.loader('url-loader')
.tap(options =>
merge(options, {
limit: 10000,
})
)
},
}
module.exports = {
//配置在移动端以[640,750]方式来处理rem的基本代码体
css: {
loaderOptions: {
postcss: {
// options here will be passed to postcss-loader
plugins: [require('postcss-px2rem')({
remUnit: 75
})]
},
}
},
}
```
© 版权声明
文章版权归作者所有,未经允许请勿转载。