【问题标题】:How do I import Vue Material (Webpack UMD) using ESM?如何使用 ESM 导入 Vue Material (Webpack UMD)?
【发布时间】:2019-10-24 11:11:04
【问题描述】:

我有一个包含以下内容的 pug 文件...

#footer
    script(type="module")
          | import Vue from '/vue/vue.esm.browser.js'
          | import { JRGVue } from '/ui/index.js'
          | import VueMaterial from '/material/vue-material.js'
          | (()=>{
          |     const vue = new JRGVue(Vue);
          |     vue.app.use(VueMaterial);
          |     vue.app.$mount('#jg-app');
          | })();

我明白了

未捕获的语法错误:请求的模块“/material/vue-material.js”未提供名为“default”的导出

当我把它改成

import * as VueMaterial from '/material/vue-material.js'

我明白了

Uncaught TypeError: _vue2.default is not a constructor

使用 ESM 导入 Vue 材质库的正确方法是什么?

更新

它似乎确实适用于 Vuetify

#footer
    script(type="module")
          | import Vue from '/vue/vue.esm.browser.js'
          | window.Vue = Vue;
    script(type="module")
          | import * as Vuetify from '/vuetify/vuetify.js';
          | import { JRGVue } from '/ui/index.js';
          | Vue.use(Vuetify);
          | const vue = new JRGVue(Vue);
          | vue.app.$mount('#jg-app');

更新

似乎不再使用最新版本。如果能找到一个支持原生 ESM 的 UI,那就太好了

【问题讨论】:

  • 您不应该在导入路径的末尾附加.js 扩展名,它应该是/material/vue-material,因为它是暴露所有模块的文件夹/路径中的index.js与插件相关联。
  • 该问题没有包含足够的详细信息,并且缺少 stackoverflow.com/help/mcve 。什么是 /material/vue-material.js ?这个你知道,别人不知道。是 vue-material dist 文件夹中的 UMD 模块吗?
  • @Terry 我会小心的。很确定 ESM 需要它,我注意到它在带有 --experimental-modules 的较新版本的节点中是必需的

标签: vue.js vue-material


【解决方案1】:

如果导入引用vue-material 库,正确的导入方法是:

import VueMaterial from 'vue-material';

并将应用程序与它捆绑在一起。

无法使用原生 ES 模块 (<script type="module">) 导入它。

可以导入构建为 ES 模块的包(例如,vuevue.esm.browser.js)但 vue-material 没有 ES6 入口点。

如果/material/vue-material.js引用vue-material/dist/vue-material.js,则为UMD模块,没有模块互操作的ES模块无法导入。

可以导入的ES模块是vue-material/src/index.js,但不能直接导入,因为包使用的源文件不符合规范(.vue、.scss),需要构建。

在运行时导入vue-materialUMD 模块的一种方法是使用SystemJS 进行模块互操作。

此外,IIFE 是模块范围内的反模式。

【讨论】:

  • 所以我想简短的回答是您不能将 Material UI 与 ESM 一起使用。是否有材料实现(与 vue 集成)?
  • 不,您可以将 ESM 与 Webpack 一起使用,或者将 SystemJS 用于模块互操作,正如我所提到的。您不能将它与 native ESM 一起使用。试试 Vuetify,它有 ESM 入口点。由于 Vue 严重依赖自定义 .vue 格式,因此将其与本机 ESM 一起使用是非常不切实际的,因为这会对大多数第三方库造成同样的问题。
猜你喜欢
  • 2021-09-17
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 2016-05-26
  • 2017-06-11
相关资源
最近更新 更多