Vue 2 + Webpack 通用导入对一个应用程序有效,但对另一个应用程序失败

Posted

技术标签:

【中文标题】Vue 2 + Webpack 通用导入对一个应用程序有效,但对另一个应用程序失败【英文标题】:Vue 2 + Webpack common imports work for one app but fail for another 【发布时间】:2022-01-23 23:49:16 【问题描述】:

这个问题已经让我好几天都拔头发了。我一直在研究一个由两个单页 Vue 应用程序组成的项目——如果你愿意,可以是一个两页应用程序。这些应用程序共享一些通用功能,因此已将其外推到/utilities/state/mixins 文件夹中。相当标准的东西。

src/
├─ apps/
│  ├─ admin/
│  │  ├─ main.js
│  │  ├─ app.vue      <-- mixins imported
│  ├─ customer/
│  │  ├─ main.js
│  │  ├─ app.vue      <-- mixins imported
├─ mixins/
├─ state/
├─ utilities/
├─ vue.config.js

我使用 webpack 为这些路径设置别名,这样我就可以在没有讨厌的相对路径的情况下访问它们。

// vue.config.js
const path = require('path');

module.exports = 
  // Put this in the ASP.NET Core directory
  outputDir: "../wwwroot/app",
  pages: 
    admin: "src/apps/admin/main.js",
    customer: "src/apps/customer/main.js",
  ,
  configureWebpack: 
    resolve: 
      alias: 
        '@app': path.resolve(__dirname, 'src/'),
        '@customer': path.resolve(__dirname, 'src/apps/customer/'),
        '@admin': path.resolve(__dirname, 'src/apps/admin/'),
        '@mixins': path.resolve(__dirname, 'src/mixins/'),
        '@utilities': path.resolve(__dirname, 'src/utilities/'),
      
    
  
;

这一切都适用于客户应用程序,通过以下方式访问 mixin 代码:

import  mixin  from '@mixins';

但是管理应用程序给我带来了一些我似乎无法解决的严重问题。 vue-cli-service 成功构建项目,没有任何错误,但是当我加载浏览器时,我得到一个空白屏幕。没有控制台错误,什么都没有。最糟糕的是我可以在管理应用程序中访问别名@state@utilities 而没有任何问题。只有@mixins 给我带来了任何问题,而我终其一生都无法弄清楚原因。

为了进行完整性检查,我将每个单独的 mixin 复制到一个别名为 @common 的新文件夹中,并从管理应用程序上导入该文件夹,以尝试查找可能导致问题的文件。我把每一个都抄了一遍,它从来没有坏过。然后,我将客户应用程序中的一个@mixins 导入切换到@common,然后再次出现没有错误的白屏。我什至尝试恢复相对进口作为冰雹玛丽 - 但问题仍然存在。如果两个应用程序都想从 mixins 文件夹中导入,就好像整个项目都搞砸了,即使只有一个也可以?

我对此束手无策。有谁知道这里可能会发生什么,因为我完全迷路了。

【问题讨论】:

【参考方案1】:

如果有人在这里结束,请确保您的 html 包含 webpacked chunk-common.js 作为脚本。我同时包含了应用程序的单个 js 文件和 chunk-vendors.js,但是,当在两个应用程序中包含 mixins 时,整个 @mixins 文件夹被提取到不再可用的公共文件夹中。令人惊讶的是,失败完全没有出现,我通常会认为浏览器控制台会出现某种类型的错误。

这个问题的根源有点模糊,因为尽管缺少通用脚本,其他一些具有共享脚本的文件夹(@utilities@state)仍然可以工作。我无法解释除了 webpack 并没有将它们提取出来,因为它们可能太小了?无论如何,请务必检查您的 webpack 基础知识。希望这至少对一个人有所帮助,因为这对我来说只是一个时间槽。

【讨论】:

以上是关于Vue 2 + Webpack 通用导入对一个应用程序有效,但对另一个应用程序失败的主要内容,如果未能解决你的问题,请参考以下文章

基于webpack搭建cesium+vue应用

vue3+webpack项目搭建实验

Vue 异步导入与 Webpack

Vue webpack动态导入需要不起作用

vuecli webpack 外部js 怎么导入

webpack+vue路由