如何在vue-cli项目中使用webpack分隔指定文件

我有一个配置文件(config.js),该文件取决于两个文件:local.js(用于开发环境)和deploy.js(用于生产环境)。在run serverun build之后,它将创建一些依赖于环境的配置。我使用它的方式如下:

<template>
</template>
<script>
import config from '@/assets/scripts/config.js'
export default {
  data() {
     return {
       apiBasePath: config.apiBasePath
     }
  }
}
</script>

我的config.js:

import local from '../../../config/local'
import deploy from '../../../config/deploy'
export default {
  apiBasePath:
    process.env.NODE_ENV === 'production'
      ? deploy.corsDomain + ':' + deploy.emergencyPort
      : local.corsDomain + ':' + local.emergencyPort,fileBasePath:
    process.env.NODE_ENV === 'production'
      ? deploy.corsDomain + ':' + deploy.emergencyPort
      : local.corsDomain + ':5000',dataBasePath:
    process.env.NODE_ENV === 'production'
      ? deploy.corsDomain + ':' + deploy.emergencyPort
      : 'http://localhost' + ':' + local.emergencyPort,vocApiPath:
    process.env.NODE_ENV === 'production'
      ? deploy.corsDomain + ':' + deploy.sharePort
      : local.corsDomain + ':' + local.sharePort,visualBasePath:
    process.env.NODE_ENV === 'production'
      ? deploy.corsDomain + ':' + deploy.simulatorPort
      : local.corsDomain + ':' + local.simulatorPort,spotBasePath:
    process.env.NODE_ENV === 'production'
      ? deploy.corsDomain + ':' + deploy.samplePort
      : local.corsDomain + ':' + local.samplePort,shareBasePath:
    process.env.NODE_ENV === 'production'
      ? deploy.corsDomain + ':' + deploy.sharePort
      : local.corsDomain + ':' + local.sharePort,envBasePath:
    process.env.NODE_ENV === 'production'
      ? deploy.corsDomain + ':' + deploy.envPort
      : local.corsDomain + ':' + local.envPort,ep360BasePath:
    process.env.NODE_ENV === 'production'
      ? deploy.corsDomain + ':' + deploy.ep360Port
      : local.corsDomain + ':' + local.ep360Port,defaultDivision: {
    province: deploy.defaultProvince ? deploy.defaultProvince : '浙江省',city: deploy.defaultCity ? deploy.defaultCity : '宁波市',area: deploy.defaultArea ? deploy.defaultArea : '鄞州区'
  }
}

但是在构建之后,这些配置将插入到大块通用脚本中。
我的目的地是:
将此配置文件从我的通用块中拆分为一个文件(假设其名称为config。[hash] .js),它将在run build时插入HTML中的脚本标记。之后,我可以更改服务器中的某些配置,并且在设置一些错误的配置时无需重建项目

更多详细信息:我的项目是一个多条目项目,几乎每个条目中都导入config.js。我尝试了@Arunmozhi所说的动态导入,尽管拆分了 config块,但由于返回了data,因此无法在Promise函数中获取配置。我正在尝试使用splitChunks解决我的问题,但这没有用。

optimization: {
  splitChunks: {
    cacheGroups: {
      myconfig: {
        test: module => {
          module
            .identifier()
            .split('/')
            .reduceRight(item => item)
            .indexOf('config') !== -1
        },name: 'myconfig',enforce: true,chunks: 'all',reuseExistingChunk: true,minChunks: 1,minSize: 0
      }
    }
  }
}
sunlingt 回答:如何在vue-cli项目中使用webpack分隔指定文件

要具有单独的脚本标记而没有进行Webpack处理,则应将其从src中取出,并将其移至public目录中并添加脚本标记到index.html。如果您以可作为全局对象使用的方式构造配置(例如document.myAppConfig),则无需进行import即可访问配置值。

编辑:如前所述,显示的配置文件取决于BUILD流程,并且不希望重新生成而不重建项目。但是,在构建之后,最接近实现灵活性的方法是使用import()函数而不是ES6 import config from "config.js"模块格式。

如果您可以找到导入配置的方法

config: () => import(/* webpackChunkName: "config" */ "./config.js")

这将生成一个单独的块,您以后可以对其进行独立编辑。

注意::这会由于Web浏览器缓存资源而给用户带来麻烦。

本文链接:https://www.f2er.com/3147968.html

大家都在问