configureWebpack:{ resolve: { // 别名配置 alias: { 'assets': '@/assets', 'common': '@/common', 'components': '@/components', 'network': '@/network', 'configs': '@/configs', 'views': '@/views', 'plugins': '@/plugins', } } },
configureWebpack: (config) => { if (process.env.NODE_ENV === 'production') { // 为生产环境修改配置... config.mode = 'production' } else { // 为生产环境修改配置... config.mode = 'development' } // 开发生产共同配置别名 Object.assign(config.resolve, { alias: { '@': path.resolve(__dirname, './src'), 'assets': path.resolve(__dirname, './src/assets'), 'common': path.resolve(__dirname, './src/common'), 'components': path.resolve(__dirname, './src/components'), 'network': path.resolve(__dirname, './src/network'), 'configs': path.resolve(__dirname, './src/configs'), 'views': path.resolve(__dirname, './src/views'), 'plugins': path.resolve(__dirname, './src/plugins'), } }) },
使用vue-cli3.x及以上版本与vue-cli2.x进行项目构建的区别之一,是生成的项目中,进行webpack配置的文件没有了。由于3.x,将大部分相同的webpack配置,已封装到cli安装包中。vue
若想添加一些本身的项目配置,只需在项目的根目录下新建一个vue.config.js文件便可,内容以下:webpack
module.exports = { outputDir: 'dist', //打包文件输出路径,即打包到哪里 assetsDir: 'static', // 静态资源地址 lintOnSave: false, // eslint-loader 是否在保存的时候检查 productionSourceMap: false, // 生产环境是否生成 sourceMap 文件 filenameHashing: true, //文件hash // chainWebpack 这个库提供了一个webpack原始配置的上层抽象,使其能够定义具名的 loader规则和具名插件, // 能够经过其提供的一些方法链式调用,在cli-service中就使用了这个插件 chainWebpack: () => {}, /* configureWebpack是调整webpack配置最简单的一种方式,能够新增也能够覆盖cli中的配置。 能够是一个对象:被 webpack-merge 合并到 webpack 的设置中去 也能够是一个函数:若是你须要基于环境有条件地配置行为,就能够进行一些逻辑处理,能够直接修改或新增配置,(该函数会在环境变量被设置以后懒执行)。该方法的第一个参数会收到已经解析好的配置。在函数内,能够直接修改配置,或者返回一个将会被合并的对象。 */ configureWebpack: {} }
webpack 中是经过 resolve.alias 来实现此功能的,参考: https://www.webpackjs.com/con...。
在vue-cli3.x中咱们能够经过如下几种方式实现:web
按图片中路径打开 base.js 文件:
能够经过set方法添加想要的 alias 配置,不推荐此方式。vue-cli
const path = require('path') function resolve (dir) { //此处可以使用 path.resolve 或 path.join return path.join(__dirname, dir) } module.exports = { devServer: { ... }, lintOnSave: false, // eslint-loader 是否在保存的时候检查 productionSourceMap: false, // 生产环境是否生成 sourceMap 文件 filenameHashing: true, //文件hash chainWebpack: config => { config.resolve.alias // 自定义key,value,如.set('@assets', resolve('src/assets')) .set(key,value) } }
对象形式,会和cli中的设置合并到一块儿函数
const path = require('path') function resolve (dir) { return path.join(__dirname, dir) } module.exports = { devServer: { ... }, lintOnSave: false, // eslint-loader 是否在保存的时候检查 productionSourceMap: false, // 生产环境是否生成 sourceMap 文件 filenameHashing: true, //文件hash configureWebpack: { resolve: { alias: { '@assets': resolve('src/assets') } } }, }
函数形式ui
const path = require('path'); function resolve (dir) { return path.join(__dirname, dir) } module.exports = { devServer: { ... }, lintOnSave: false, // eslint-loader 是否在保存的时候检查 productionSourceMap: false, // 生产环境是否生成 sourceMap 文件 filenameHashing: true, //文件hash configureWebpack: config => { if (isProduction) { ... } else { ... } //直接修改配置 config.resolve.alias['@asset'] = resolve('src/assets') } }
或者:spa
const path = require('path'); function resolve (dir) { return path.join(__dirname, dir) } module.exports = { devServer: { ... }, lintOnSave: false, // eslint-loader 是否在保存的时候检查 productionSourceMap: false, // 生产环境是否生成 sourceMap 文件 filenameHashing: true, //文件hash configureWebpack: config => { if (isProduction) { ... } else { ... } //返回一个将要合并的对象 return { resolve: { alias: { '@asset':resolve('src/assets') } } } } }
最好不要使用下面的方式,由于Object.assign方法在合并对象时,若是目标对象(config)上有相同的属性(resolve),将会被覆盖掉。不过这样写 Object.assign(config.resolve,{alias:{}})
仍是能够的,只是覆盖掉了alias。插件
Object.assign(config, { resolve: { alias: { '@': resolve('./src'), '@assets': resolve('./src/assets') } } })
合并后,变成:eslint
alias: { '@': resolve('./src'), '@assets': resolve('./src/assets') }
可是 cli-service 中 resolve 被覆盖掉后,它的其余属性将会消失。code