vue.config.js中configureWebpack与chainWebpack区别及说明

目录
  • configureWebpack与chainWebpack区别
    • 1.configureWebpack
    • 2.chainWebpack
  • vue-cli中chainWebpack和configureWebpack
    • vue.config.js

configureWebpack与chainWebpack区别

configureWebpack与chainWebpack的作用相同,唯一的区别就是他们修改webpack配置方式不同:

https://cli.vuejs.org/zh/config/#configurewebpack

configureWebpack 通过操作对象得形式来修改迷人得webpack配置,该对象将会呗webpack-merge合并入最终得webpack配置

chainWebpack 通过链式编程的形式来修改默认的webpack配置

1.configureWebpack

1.1configureWebpack对象形式  

configureWebpack: {
  resolve: {
   // 别名配置
    alias: {
      'assets': '@/assets',
      'common': '@/common',
    'components': '@/components'
   }    
 }  
}

1.2configureWebpack函数形式

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(process.env.NODE_ENV === 'production') {
      ...
    }else {
      ...
    }
    // 直接修改配置
    config.resolve.alias['assets'] = resolve('src/assets')
  }
}

或者

configureWebpack: config => {
  if(process.env.NODE_ENV){
    ...
  }else{
    ...
  }
  // 返回一个将要合并得对象
  return {
    resolve: {
      alias: {
        '@asset': resolve("src/assets")
      }
    }
  }
}

2.chainWebpack

修改Loader选项

module.exports = {
  chainWebpack: config => {
    config.module
    .rule('vue')
    .use('vue-loader')
    .tap(options => {
      // 修改他的选项
      return options
    })
  }
}

添加一个新的Loader

module.exports = {
  chainWebpack: config => {
    config.module
    .rule('graphql')
    .test('/\.graphql$/')
    .use(''graphql-tag/loader')
     .loader('graphql-tag/loader)
     .end()
    // 你还可以再添加一个loader
    .use('other-loader')
      .loader('other-loader')
      .end()
  }
}

替换一个规则里的Loader

module.exports = {
  chainWebpack: config => {
    const svgRule = config.module.rule('svg')
    // 清楚已有的所有loader。
    // 如果你不这样做,接下来的loader会附加在该规则现有的 loader 之后。
    svgRule.uses.clear()
    // 添加要替换的 loader 
    svgRule
      .use('vue-svg-loader')
        .loader('vue-svg-loader')
  }
}

vue-cli中chainWebpack和configureWebpack

我们目前做的是国外的项目,考虑到东南亚浏览器版本低,所以公司采用了vue-cli2来搭建项目。

vue.config.js

  • configureWebpack可以是对象,也可以是函数
  • chainWebpack 可以是对象也可以是函数

当我们不知道config中有哪些属性或者方法的时候我们就可以采取函数的方式打印config然后再尝试这如何配置

函数 打印config

打印 configureWebpack中的config

const path = require('path')
const resolve = (dir) => path.join(__dirname, dir)
module.exports = {
  publicPath: './',
  runtimeCompiler: true,
  configureWebpack: (config) => {
    console.log(config)
  },
}

config结果为

  mode: 'production',
  context: 'C:\\Users\\shiyang.xue\\Desktop\\sems-pc',
  devtool: false,
  node: {
    setImmediate: false,
    process: 'mock',
    dgram: 'empty',
    fs: 'empty',
    net: 'empty',
    tls: 'empty',
    child_process: 'empty'
  },
  output: {
    path: 'C:\\Users\\shiyang.xue\\Desktop\\sems-pc\\dist',
    filename: 'js/[name].[contenthash:8].js',
    publicPath: '',
    chunkFilename: 'js/[name].[contenthash:8].js'
  },
  resolve: {
    alias: {
      '@': 'C:\\Users\\shiyang.xue\\Desktop\\sems-pc\\src', //别名
      'vue$': 'vue/dist/vue.esm.js'
    },
    extensions: [ '.mjs', '.js', '.jsx', '.vue', '.json', '.wasm' ],// vue解析时候查找文件的顺序
    modules: [ // modules包的文件位置
      'node_modules',
      'C:\\Users\\shiyang.xue\\Desktop\\sems-pc\\node_modules',
      'C:\\Users\\shiyang.xue\\Desktop\\sems-pc\\node_modules\\@vue\\cli-service\\node_modules'
    ],
    plugins: [ [Object] ]
  },
  resolveLoader: {
    modules: [
    // 这块就是modules的文件所在位置
    ],
    plugins: [ [Object] ]
  },
  module: {
    noParse: /^(vue|vue-router|vuex|vuex-router-sync)$/,
    rules: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ]
  },
  optimization: {
    splitChunks: { cacheGroups: [Object] },
    minimizer: [ [TerserPlugin] ]
  },
  plugins: [
    VueLoaderPlugin {},
    DefinePlugin { definitions: [Object] },
    CaseSensitivePathsPlugin {
      options: {},
      logger: [Object [console]],
      pathCache: Map(0) {},
      fsOperations: 0,
      primed: false
    },
    FriendlyErrorsWebpackPlugin {
      compilationSuccessInfo: {},
      onErrors: undefined,
      shouldClearConsole: true,
      formatters: [Array],
      transformers: [Array],
      previousEndTimes: {}
    },
    MiniCssExtractPlugin { options: [Object] },
    OptimizeCssnanoPlugin { options: [Object] },
    HashedModuleIdsPlugin { options: [Object] },
    NamedChunksPlugin { nameResolver: [Function (anonymous)] },
    HtmlWebpackPlugin { options: [Object] },
    PreloadPlugin { options: [Object] },
    PreloadPlugin { options: [Object] },
    CopyPlugin { patterns: [Array], options: {} }
  ],
  entry: { app: [ './src/main.js' ] }
}

有了以上的信息,你就知道如何配置了,config信息中没有发现performance这个属性但是你利用对象的处理方式就可以。

  configureWebpack: {
    performance: {
      hints: 'error', // 枚举
      maxAssetSize: 30000000, // 整数类型(以字节为单位) // 单个文件大小超出就提示
      maxEntrypointSize: 500000000, // 整数类型(以字节为单位) // 入口文件大小超出设定的值 就提示
      assetFilter: function (assetFilename) {
        // 提供资源文件名的断言函数
        return assetFilename.endsWith('.css') || assetFilename.endsWith('.js')
      }
    },
  },

这个和 vue-cli解析webpack的方式有关系,对象的方式解析的时候直接就取webpack原始的配置项目,然后再进行更新,而函数的方式只暴露一些常用的必须的方法或者属性,个人理解。

chainWebpack 函数式

const path = require('path')
const resolve = (dir) => path.join(__dirname, dir)
module.exports = {
  publicPath: './',
  runtimeCompiler: true,
  chainWebpack : (config) => {
    console.log(config)
  },
}

config打印

  parent: undefined,
  store: Map(3) {
    'mode' => 'production',
    'context' => 'C:\\Users\\shiyang.xue\\Desktop\\sems-pc',
    'devtool' => false
  },
  devServer: <ref *2> {
    parent: [Circular *1],
    store: Map(0) {},
    allowedHosts: { parent: [Circular *2], store: Set(0) {} },
    shorthands: [
      'after',            'before',             'bonjour',
      'clientLogLevel',   'color',              'compress',
      'contentBase',      'disableHostCheck',   'filename',
      'headers',          'historyApiFallback', 'host',
      'hot',              'hotOnly',            'http2',
      'https',            'index',              'info',
      'inline',           'lazy',               'mimeTypes',
      'noInfo',           'open',               'openPage',
      'overlay',          'pfx',                'pfxPassphrase',
      'port',             'proxy',              'progress',
      'public',           'publicPath',         'quiet',
      'setup',            'socket',             'sockHost',
      'sockPath',         'sockPort',           'staticOptions',
      'stats',            'stdin',              'useLocalIp',
      'watchContentBase', 'watchOptions',       'writeToDisk'
    ],
    after: [Function (anonymous)],
    before: [Function (anonymous)],
    bonjour: [Function (anonymous)],
    clientLogLevel: [Function (anonymous)],
    color: [Function (anonymous)],
    compress: [Function (anonymous)],
    contentBase: [Function (anonymous)],
    disableHostCheck: [Function (anonymous)],
    filename: [Function (anonymous)],
    headers: [Function (anonymous)],
    historyApiFallback: [Function (anonymous)],
    host: [Function (anonymous)],
    hot: [Function (anonymous)],
    hotOnly: [Function (anonymous)],
    http2: [Function (anonymous)],
    https: [Function (anonymous)],
    index: [Function (anonymous)],
    info: [Function (anonymous)],
    inline: [Function (anonymous)],
    lazy: [Function (anonymous)],
    mimeTypes: [Function (anonymous)],
    noInfo: [Function (anonymous)],
    open: [Function (anonymous)],
    openPage: [Function (anonymous)],
    overlay: [Function (anonymous)],
    pfx: [Function (anonymous)],
    pfxPassphrase: [Function (anonymous)],
    port: [Function (anonymous)],
    proxy: [Function (anonymous)],
    progress: [Function (anonymous)],
    public: [Function (anonymous)],
    publicPath: [Function (anonymous)],
    quiet: [Function (anonymous)],
    setup: [Function (anonymous)],
    socket: [Function (anonymous)],
    sockHost: [Function (anonymous)],
    sockPath: [Function (anonymous)],
    sockPort: [Function (anonymous)],
    staticOptions: [Function (anonymous)],
    stats: [Function (anonymous)],
    stdin: [Function (anonymous)],
    useLocalIp: [Function (anonymous)],
    watchContentBase: [Function (anonymous)],
    watchOptions: [Function (anonymous)],
    writeToDisk: [Function (anonymous)]
  },
  entryPoints: { parent: [Circular *1], store: Map(1) { 'app' => [Object] } },
  module: <ref *3> {
    parent: [Circular *1],
    store: Map(1) { 'noParse' => /^(vue|vue-router|vuex|vuex-router-sync)$/ },
    rules: { parent: [Circular *3], store: [Map] },
    defaultRules: { parent: [Circular *3], store: Map(0) {} },
    shorthands: [ 'noParse', 'strictExportPresence' ],
    noParse: [Function (anonymous)],
    strictExportPresence: [Function (anonymous)]
  },
  node: {
    parent: [Circular *1],
    store: Map(7) {
      'setImmediate' => false,
      'process' => 'mock',
      'dgram' => 'empty',
      'fs' => 'empty',
      'net' => 'empty',
      'tls' => 'empty',
      'child_process' => 'empty'
    }
  },
  optimization: <ref *4> {
    parent: [Circular *1],
    store: Map(1) { 'splitChunks' => [Object] },
    minimizers: { parent: [Circular *4], store: [Map] },
    shorthands: [
      'concatenateModules',
      'flagIncludedChunks',
      'mergeDuplicateChunks',
      'minimize',
      'namedChunks',
      'namedModules',
      'nodeEnv',
      'noEmitOnErrors',
      'occurrenceOrder',
      'portableRecords',
      'providedExports',
      'removeAvailableModules',
      'removeEmptyChunks',
      'runtimeChunk',
      'sideEffects',
      'splitChunks',
      'usedExports'
    ],
    concatenateModules: [Function (anonymous)],
    flagIncludedChunks: [Function (anonymous)],
    mergeDuplicateChunks: [Function (anonymous)],
    minimize: [Function (anonymous)],
    namedChunks: [Function (anonymous)],
    namedModules: [Function (anonymous)],
    nodeEnv: [Function (anonymous)],
    noEmitOnErrors: [Function (anonymous)],
    occurrenceOrder: [Function (anonymous)],
    portableRecords: [Function (anonymous)],
    providedExports: [Function (anonymous)],
    removeAvailableModules: [Function (anonymous)],
    removeEmptyChunks: [Function (anonymous)],
    runtimeChunk: [Function (anonymous)],
    sideEffects: [Function (anonymous)],
    splitChunks: [Function (anonymous)],
    usedExports: [Function (anonymous)]
  },
  output: {
    parent: [Circular *1],
    store: Map(4) {
      'path' => 'C:\\Users\\shiyang.xue\\Desktop\\sems-pc\\dist',
      'filename' => 'js/[name].[contenthash:8].js',
      'publicPath' => '',
      'chunkFilename' => 'js/[name].[contenthash:8].js'
    },
    shorthands: [
      'auxiliaryComment',
      'chunkCallbackName',
      'chunkFilename',
      'chunkLoadTimeout',
      'crossOriginLoading',
      'devtoolFallbackModuleFilenameTemplate',
      'devtoolLineToLine',
      'devtoolModuleFilenameTemplate',
      'devtoolNamespace',
      'filename',
      'futureEmitAssets',
      'globalObject',
      'hashDigest',
      'hashDigestLength',
      'hashFunction',
      'hashSalt',
      'hotUpdateChunkFilename',
      'hotUpdateFunction',
      'hotUpdateMainFilename',
      'jsonpFunction',
      'library',
      'libraryExport',
      'libraryTarget',
      'path',
      'pathinfo',
      'publicPath',
      'sourceMapFilename',
      'sourcePrefix',
      'strictModuleExceptionHandling',
      'umdNamedDefine',
      'webassemblyModuleFilename'
    ],
    auxiliaryComment: [Function (anonymous)],
    chunkCallbackName: [Function (anonymous)],
    chunkFilename: [Function (anonymous)],
    chunkLoadTimeout: [Function (anonymous)],
    crossOriginLoading: [Function (anonymous)],
    devtoolFallbackModuleFilenameTemplate: [Function (anonymous)],
    devtoolLineToLine: [Function (anonymous)],
    devtoolModuleFilenameTemplate: [Function (anonymous)],
    devtoolNamespace: [Function (anonymous)],
    filename: [Function (anonymous)],
    futureEmitAssets: [Function (anonymous)],
    globalObject: [Function (anonymous)],
    hashDigest: [Function (anonymous)],
    hashDigestLength: [Function (anonymous)],
    hashFunction: [Function (anonymous)],
    hashSalt: [Function (anonymous)],
    hotUpdateChunkFilename: [Function (anonymous)],
    hotUpdateFunction: [Function (anonymous)],
    hotUpdateMainFilename: [Function (anonymous)],
    jsonpFunction: [Function (anonymous)],
    library: [Function (anonymous)],
    libraryExport: [Function (anonymous)],
    libraryTarget: [Function (anonymous)],
    path: [Function (anonymous)],
    pathinfo: [Function (anonymous)],
    publicPath: [Function (anonymous)],
    sourceMapFilename: [Function (anonymous)],
    sourcePrefix: [Function (anonymous)],
    strictModuleExceptionHandling: [Function (anonymous)],
    umdNamedDefine: [Function (anonymous)],
    webassemblyModuleFilename: [Function (anonymous)]
  },
  performance: {
    parent: [Circular *1],
    store: Map(0) {},
    shorthands: [ 'assetFilter', 'hints', 'maxAssetSize', 'maxEntrypointSize' ],
    assetFilter: [Function (anonymous)],
    hints: [Function (anonymous)],
    maxAssetSize: [Function (anonymous)],
    maxEntrypointSize: [Function (anonymous)]
  },
  plugins: {
    parent: [Circular *1],
    store: Map(12) {
      'vue-loader' => [Object],
      'define' => [Object],
      'case-sensitive-paths' => [Object],
      'friendly-errors' => [Object],
      'extract-css' => [Object],
      'optimize-css' => [Object],
      'hash-module-ids' => [Object],
      'named-chunks' => [Object],
      'html' => [Object],
      'preload' => [Object],
      'prefetch' => [Object],
      'copy' => [Object]
    }
  },
  resolve: <ref *5> {
    parent: [Circular *1],
    store: Map(0) {},
    alias: { parent: [Circular *5], store: [Map] },
    aliasFields: { parent: [Circular *5], store: Set(0) {} },
    descriptionFiles: { parent: [Circular *5], store: Set(0) {} },
    extensions: { parent: [Circular *5], store: [Set] },
    mainFields: { parent: [Circular *5], store: Set(0) {} },
    mainFiles: { parent: [Circular *5], store: Set(0) {} },
    modules: { parent: [Circular *5], store: [Set] },
    plugins: { parent: [Circular *5], store: [Map] },
    shorthands: [
      'cachePredicate',
      'cacheWithContext',
      'concord',
      'enforceExtension',
      'enforceModuleExtension',
      'symlinks',
      'unsafeCache'
    ],
    cachePredicate: [Function (anonymous)],
    cacheWithContext: [Function (anonymous)],
    concord: [Function (anonymous)],
    enforceExtension: [Function (anonymous)],
    enforceModuleExtension: [Function (anonymous)],
    symlinks: [Function (anonymous)],
    unsafeCache: [Function (anonymous)]
  },
  resolveLoader: <ref *6> {
    parent: [Circular *1],
    store: Map(0) {},
    alias: { parent: [Circular *6], store: Map(0) {} },
    aliasFields: { parent: [Circular *6], store: Set(0) {} },
    descriptionFiles: { parent: [Circular *6], store: Set(0) {} },
    extensions: { parent: [Circular *6], store: Set(0) {} },
    mainFields: { parent: [Circular *6], store: Set(0) {} },
    mainFiles: { parent: [Circular *6], store: Set(0) {} },
    modules: { parent: [Circular *6], store: [Set] },
    plugins: { parent: [Circular *6], store: [Map] },
    shorthands: [
      'cachePredicate',
      'cacheWithContext',
      'concord',
      'enforceExtension',
      'enforceModuleExtension',
      'symlinks',
      'unsafeCache'
    ],
    cachePredicate: [Function (anonymous)],
    cacheWithContext: [Function (anonymous)],
    concord: [Function (anonymous)],
    enforceExtension: [Function (anonymous)],
    enforceModuleExtension: [Function (anonymous)],
    symlinks: [Function (anonymous)],
    unsafeCache: [Function (anonymous)],
    moduleExtensions: { parent: [Circular *6], store: Set(0) {} },
    packageMains: { parent: [Circular *6], store: Set(0) {} }
  },
  shorthands: [
    'amd',         'bail',
    'cache',       'context',
    'devtool',     'externals',
    'loader',      'mode',
    'name',        'parallelism',
    'profile',     'recordsInputPath',
    'recordsPath', 'recordsOutputPath',
    'stats',       'target',
    'watch',       'watchOptions'
  ],
  amd: [Function (anonymous)],
  bail: [Function (anonymous)],
  cache: [Function (anonymous)],
  context: [Function (anonymous)],
  devtool: [Function (anonymous)],
  externals: [Function (anonymous)],
  loader: [Function (anonymous)],
  mode: [Function (anonymous)],
  name: [Function (anonymous)],
  parallelism: [Function (anonymous)],
  profile: [Function (anonymous)],
  recordsInputPath: [Function (anonymous)],
  recordsPath: [Function (anonymous)],
  recordsOutputPath: [Function (anonymous)],
  stats: [Function (anonymous)],
  target: [Function (anonymous)],
  watch: [Function (anonymous)],
  watchOptions: [Function (anonymous)]
}

chainWebpack中的config信息比较完成,而且详细,个人喜欢打印这个然后找具体的使用方法

对象的方式来配置,需要参照webapck文档来配置

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • webpack4升级到webpack5的实战经验总结

    目录 前言 terser-webpack-plugin语法报错 fork-ts-checker-webpack-plugin语法报错 IgnorePlugin报错 devtool报错 webpack-dev-server publicPath报错 webpack-dev-server disableHostCheck报错 移除 node.js polyfill 导入json文件语法改变 打包报错unknown option ‘-p’ node版本过低 图片编译问题 打包文件命名问题 废弃了Mod

  • JavaScript自定义Webpack配置实现流程介绍

    目录 1 初始化并创建要被打包的文件 2 命令行配置 3 配置文件配置 1 初始化并创建要被打包的文件 首先创建文件夹webpack-demo(随便起一个),用来演示打包过程.在该文件夹下终端运行命令,对项目进行初始化操作,对包进行管理: npm init # 输入命令后一直敲回车即可 npm init -y # -y是yes的意思,在初始化时省去敲回车的步骤 命令成功运行之后,该文件夹下出现了package.json文件,文件内容具体如下: { "name": "webpa

  • JavaScript webpack模块打包器如何优化前端性能

    目录 一.webpack的使用背景 二.webpack如何优化 1. JS代码压缩 2.CSS代码压缩 3. HTML文件压缩 4. 文件大小压缩 5. 图片压缩 6. Tree Shaking 7. 代码分离 8. 内联chunk 9. 利用CDN加速以及提取公共第三方库 三.总结 一.webpack的使用背景 随着前端的项目逐渐扩大,必然会导致性能问题.尤其大大型复杂的项目中,前端业务可能因为一个小小的数据依赖,导致整个页面的卡顿甚至崩溃. 一般项目在完成后,会通过webpack进行打包,利

  • JavaScript webpack5配置及使用基本介绍

    目录 一.webpack 1.1 简介 1.2 五大核心概念 entry (入口) output (出口) loader plugin (插件) mode (模式) 二.配置及使用 项目结构 使用html-webpack-plugin 三.写在最后 一.webpack 1.1 简介 在最原始的前端开发中,我们引入js和css等文件都是通过手动地在html中插入script和link标签来达到引用的目的,不仅繁琐,每个文件都需要单独发一次请求,而且容易发生变量冲突的问题. 于是提出了JavaScr

  • webpack打包的3种hash值详解

    目录 前言 当年的校招 哪三种? 实践讲解 事先准备 打包环境搭建 hash chunkhash contenthash 前言 大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心 当年的校招 依稀记得,当年我参加了大厂的校招,面试的是网易雷火工作室,当时有一道题,我记得很清楚,就是:说说webpack中三种hash配置的区别 哈哈,我当时连webpack都不太会配置,所以也答不出来,然后也...没有然后了.. 哪三种? webpack中的三种hash分别是

  • webpack 5.68.0版本教程示例详解

    目录 起步 1. 基本安装 2. 配置出入口 plugin 1. html-webpack-plugin 2. progress-bar-webpack-plugin loader 1. css-loader与style-loader 2. url-loader与file-loader 3. sass-loader 4. postcss-loader 5. babel-loader 搭建环境 1. 开发环境与生产环境 2. 配置别名 代码分离 1. webpack-bundle-analyzer

  • vue.config.js中configureWebpack与chainWebpack区别及说明

    目录 configureWebpack与chainWebpack区别 1.configureWebpack 2.chainWebpack vue-cli中chainWebpack和configureWebpack vue.config.js configureWebpack与chainWebpack区别 configureWebpack与chainWebpack的作用相同,唯一的区别就是他们修改webpack配置方式不同: https://cli.vuejs.org/zh/config/#con

  • vue - vue.config.js中devServer配置方式

    前言 这里写你调用接口的基础路径,来解决跨域,如果设置了代理,那你本地开发环境的axios的baseUrl要写为'',即空字符串 只有一个接口ip端口时 devServer: { open: false, // 跨域 proxy: { '/nuojinadm/': { target: 'http://192.168.0.11/', changeOrigin: true } } } 2.设置axios中的baseUrl 与proxy端口一致 baseUrl: { dev: '/nuojinadm/

  • vue.config.js中devServer.proxy配置说明及配置正确不生效问题解决

    目录 proxy 配置确认.解析 原因 一 原因二 注意 详解 pathRewrite changeOrigin 总结 proxy 配置确认.解析 devServer: { https: true, // 开启https模式 // 配置服务器代理 proxy: { '/api': { // 匹配访问路径中含有 '/api' 的路径 target: 'http://localhost:3000/', // 测试地址.目标地址 changeOrigin: true, ws: true, // 是否开

  • vue.config.js中配置Vue的路径别名的方法

    在官方的vue-cli配置参考中存在一个configureWebpack webpack中有一个配置路径别名的属性 const path = require('path') module.exports = { // 对象和函数都可以,如果要控制开发环境可以选择函数 configureWebpack:{ resolve:{ alias:{ 'assets':path.resolve('./src/assets') } } } 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我

  • vue3中vue.config.js配置及注释详解

    目录 报错 打包时提示文件过大,配置解决方案,如下 总结 报错 asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).This can impact web performance.entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit

  • 详解如何配置vue-cli3.0的vue.config.js

    本文介绍了如何配置vue-cli3.0的vue.config.js,分享给大家,具体如下: vue-cli 3 英文文档 vue-cli 3 中文文档 webpack 4 plugins webpack-chain TLDR vue-cli 3 与 2 版本有很大区别 vue-cli 3 的 github 仓库由原有独立的 github 仓库迁移到了 vue 项目下 vue-cli 3 的项目架构完全抛弃了 vue-cli 2 的原有架构,3 的设计更加抽象和简洁(此处后续可以详细介绍) vue

  • vue2.x 从vue.config.js配置到项目优化

    vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载.你也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照 JSON 的格式来写. 前言 在实际项目中优化也是经常需要做的事情,特别在中大型项目中降低打包体积大小,提高首屏加载时间是必不可少的,同时在面试中也是一个高频问题.本片文章我将从vue.config.js配置到项目优化前后效果

  • vue3.0 vue.config.js 配置基础的路径问题

    目录 vue3.0 vue.config.js 配置基础路径 vue3.0+ 3.x config配置 vue3.0 vue.config.js 配置基础路径 在和src同级的路径下创建一个文件名,vue.config.js(这文件名是固定这么写的) 在文件中写入 module.exports = {     baseUrl:'/',//根路径     outputDir:'dist',//打包的时候生成的一个文件名     assetsDir:'assets',//静态资源目录(js,css,

  • Vue前端vue.config.js简介

    目录 vue.config.js publicPath outputDir assetsDir devServer process.env.VUE_APP_BASE_API PS:vue.config.js详解 vue.config.js vue项目的配置文件,需要严格遵照 JSON 的格式来写.结构如下: module.exports = { // 选项... } publicPath 部署应用包时的基本 URL.例如 https://www.my-app.com/,则publicPath则为

  • vue-cli3中vue.config.js配置教程详解

    前言 vue-cli3推崇零配置,其图形化项目管理也很高大上. 但是vue-cli3推崇零配置的话,导致了跟之前vue-cli2的配置方式都不一样了. 别名设置,sourcemap控制,输入文件位置和输出文件位置和输出的方式,压缩js控制,打包webapck日志分析,externals忽略配置(外部引入),调试的端口配置,proxy接口配置等等的. 有时候还需要我们配置的,因为官方推荐的,并不适用于我们平时的开发所用的. 所以,我的vue.config.js配置是下面这样的.还有一个改hash的

随机推荐