Vue 和 Webpack 中的动态导入路径

2023-12-28

我正在 VueJS 2 (和 Vue-CLI 3)中创建一个前端项目,该项目将由不同的客户端使用,我希望能够导入基本上我需要的所有内容(JS 文件,如 mixins 和组件代码以及 CSS/LESS 文件)在 webpack 构建过程中,基于将存储在以下位置的 CID 进行参数化: 1) Vue .env 文件或 2) webpack 配置文件中的某个位置或 3)作为参数传递给npm run watch and 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";).

将此类变量注入构建过程的最简单的解决方案是什么?谢谢!


作为一种选择,可以使用别名和架构规则的组合来实现所请求的功能。

1) Pass CLIENTID通过环境变量或从任何自定义配置文件导出它。既然提到了CI,我们就建议一下process.env用来。

2) 为可用于导入的所有相关路径创建别名。可以在vue.config.js(的情况下@vue/cli3.0+)或在 webpack 配置文件中。

上述路径的示例:

'~styles': `src/styles/${process.env.CLIENTID}`
'~components': `src/components/${process.env.CLIENTID}`
'~something': `src/something/${process.env.CLIENTID}`

3) 更改项目结构,将客户端特定组件包含到单独的文件夹中,同时通过默认路径保持共享代码可用。

4)使用别名,这将解析正确的路径:

import CustomButton from '~components/custom-button.vue'

如果您计划为不同的客户提供多个版本,那么将项目架构重构为将每个版本的所有相关资产进行拆分可能会很有用。CLIENTID, e.g.:

project |
        |-- common     |
        |              |--styles
        |              |--components
        |               
        |--CLIENTID_1  |
        |              |--styles
        |              |--components
        |
        |--CLIENTID_2  |
                       |--styles
                       |--components

这样别名的声明和使用会更加方便:

'~common': `src/common`
'~client': `src/${process.env.CLIENTID}`  

import CommonButton from '~common/components/common-button.vue'
import CustomButton from '~client/components/custom-button.vue'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue 和 Webpack 中的动态导入路径 的相关文章

随机推荐

  • 停止 HttpURLConnection 中的静默重试

    我在用着HttpURLConnection on 安卓奇巧将一些数据发布到服务器 服务器需要很长时间才能响应 并且连接在超时之前会静默重试 1 到 3 次 我不希望它重试 因为服务器会对所有请求执行操作 从而导致 Bad Things TM
  • Javascript滚动到div id [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 编辑问题以包括期望的行为 特定问题或错误以及重现问题所需的最短代码 help minimal reproducible example 这
  • Hystrix 仪表板始终显示加载屏幕

    我使用 Netflix OSS 库开发了微服务应用程序 我在 localhost 9091 hystrix 上运行的 Hystrix 仪表板上遇到问题 我想监控微服务A和微服务B之间的请求指标 端点 hystrix stream 已注册 h
  • 我得到了错误的客户端 IP 地址

    我正在运行 ASP NET 应用程序 Web 服务器位于同一系统上 在后面的代码中我只想获取请求客户端的IP地址 我正在使用这段代码 Request UserHostAddress 但我得到了一个错误的地址 127 0 0 1 我的系统IP
  • Rails own_to 关联(带有 :class_name)返回 nil

    我对 Rails 开发比较陌生 并且遇到了一个小的关联问题 我想将一个关联命名为与其所链接的模型不同的名称 我有以下2个型号 class User lt ActiveRecord Base has many events end class
  • SecurityException:不允许启动服务

    在我们的应用程序中 我们有一个Service以这种方式定义
  • 在 Angular.js $http 请求之后,无论 Promise 成功还是失败,都调用完整的函数

    我怎样才能确保complete 无论 http 调用的结果如何 函数都会使用 Angular js 提供的 Promise API 运行吗 http method POST url submitUrl data scope data suc
  • 在 Sublime Text 中如何复制没有行尾字符的行

    在 ST3 中 您只需使用 ctrl c 即可复制整行 这非常有用 唯一的问题是该命令还会复制 返回 或换行符 因此例如当您复制一行并粘贴到控制台中时它将立即运行该命令 这是不可取的 因为我想在运行命令之前先对其进行编辑 这迫使我手动突出显
  • R 神经网络包 - net.result 显示什么?

    使用以下代码 我构建了一个神经网络模型来预测收盘价 library neuralnet myformula lt close High Low Open nn close lt neuralnet myformula data train
  • OAuth2 访问令牌中允许使用哪些字符?

    RFC6749 https www rfc editor org rfc rfc6749 and RFC6750 https www rfc editor org rfc rfc6750对于 OAuth2 访问令牌中允许使用哪些字符 似乎彼
  • 在 python-social-auth 中从 google 和 facebook 检索个人资料图片

    如何通过扩展管道使用 python social auth 从 google 和 facebook 检索个人资料图片和出生日期 我读过 我可以创建函数来执行此操作并设置它们的路径 但我不知道必须检索的属性名称 请帮忙 要从社交登录获取头像
  • Eclipse 着色:所有出现的选择的背景颜色的首选项目是什么

    在 Eclipse 中 当单击标识符 函数名称或变量等 时 给出了该标识符的背景以及该标识符的所有其他出现情况 不同的背景颜色 谁能告诉我 为此更改背景颜色的首选项是什么 最后这个保留在我的黑暗日食设置中 有一个部分标题为注释允许您配置背景
  • SQL Server:找不到数据类型日期且无法设置兼容性

    我有一个使用 DATE 的安装脚本 我正在运行 SQL Server 2008 R2 它不喜欢日期类型 Msg 2715 Level 16 State 7 Line 1 Column parameter or variable 3 Cann
  • 这个符号 () => 在 Javascript 中是什么意思? [复制]

    这个问题在这里已经有答案了 您可以在这段代码的第一行看到 gt 符号 const server http createServer req res gt res statusCode 200 res setHeader content ty
  • 解析/使用来自 3rd 方依赖项的多个程序集版本

    在我的项目中 我遇到了依赖层次结构的问题 我使用一个图书馆 可写位图扩展 http writeablebitmapex codeplex com 在我的代码中 我还有另一个也使用 WriteableBitmapExtensions 的第 3
  • CodeIgniter 更新查询执行两次

    我正在使用 CodeIgniter 2 2 每次访问页面时 我都必须用 1 更新数据库 代码可以工作 但每次都会增加 2 示例 如果total views 2 一旦页面被点击total views应该3 但数据库中的值为4 我确定我正在调用
  • 为什么 Impala 花费大量时间打开 HDFS 文件(TotalRawHdfsOpenFileTime)?

    我发现我的Impala swarm表现不稳定 正常情况下只需要几秒 不到10s 就可以完成一个查询 但偶尔会需要40s以上 而且这种情况会持续几分钟 当偏偏 根据配置文件 TotalRawHdfsOpenFileTime 非常高 这意味着大
  • 从 webpack 传递较少的变量

    当然 我试图将 webpack 配置中的 less 变量传递给 less 加载器 由于某种原因 变量未正确传递 我无法弄清楚正确的语法 该变量具有在构建时在 webpack 配置文件中确定的动态内容 这是相关的行 我已经尝试过它的许多变体
  • Junit 在仍然通过测试时抛出警告

    我目前正在开发一个项目 我们正在使用 junit 进行测试 但由于它仍处于相当早期的阶段 许多功能尚未实现 尽管他们已经为它们编写了测试 这意味着这些测试 显然 总是失败 我想知道是否有人知道如何让 JUnit 在显示警告的同时通过测试 最
  • Vue 和 Webpack 中的动态导入路径

    我正在 VueJS 2 和 Vue CLI 3 中创建一个前端项目 该项目将由不同的客户端使用 我希望能够导入基本上我需要的所有内容 JS 文件 如 mixins 和组件代码以及 CSS LESS 文件 在 webpack 构建过程中 基于