【发布时间】:2019-05-05 07:28:09
【问题描述】:
我正在 VueJS 2(和 Vue-CLI 3)中创建一个前端项目,它将被不同的客户端使用,我希望能够导入我需要的所有内容(JS 文件,如 mixins 和组件代码和 CSS /LESS 文件)在 webpack 构建过程中基于 CID 参数化,该 CID 将存储在:
1) Vue .env 文件或
2) webpack 配置文件中的某处或
3) 作为参数传递给npm run watch 和npm run build。
我搜索了很多解决方案(Webpack 插件等),但它们都不是简单或优雅的,我也不能真正理解 Webpack 的内部工作原理来实现这些解决方案,而且大多数都与动态加载有关,而不是动态构建过程。
不同的客户端需要不同的代码和样式,例如:
<template>...</template>
<script src="./component-code.js"></script>
<style src="@/styles/component-style.less"></style>
这些路径需要按照以下方式转变:
<template>...</template>
<script src="./CLIENTID/component-code.js"></script>
<style src="@/styles/CLIENTID/component-style.less"></style>
...这样 Webpack 可以在使用真实文件夹名称进行编译时替换这些 CLIENTID 引用,无论它们可能是什么。这也必须适用于任何其他文件路径(例如,当使用像 import something from "./path/CLIENTID/to/file"; 这样的语句时)。
将此类变量注入构建过程的最简单解决方案是什么?谢谢!
【问题讨论】:
-
您最终是否使用下面提出的解决方案进行生产?我面临着类似的挑战,但没有很多真正针对客户的组件。
-
实际上不,我实现了一个反模式,它使用 CSS 类和 JS 条件,由于我们的时间线,临时工作(导入所有项目的所有代码)但我计划重构项目以使用所选答案中概述的解决方案,其中 Webpack 将根据环境变量动态导入文件。这不是一个大项目,也不是一个高优先级的项目。但是,当我开始重构它时,我会在此处发布更多详细信息。
-
只是对此的一个小更新 - 我最终还是继续接受了接受的答案,并重构了应用程序以在项目文件路径中使用 CLIENTID 作为别名。它对我们很有用。它不是 100% 完美的,但它非常灵活且易于设置,并且以这种方式更易于维护。在实现此目标时,推荐使用此用例的方法,而不会过多地破坏默认的 Vue 项目设置。
标签: vue.js webpack build environment-variables