【发布时间】:2020-01-18 04:25:47
【问题描述】:
我有一个单文件组件,我需要导入 Vue:
<script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'
...
@Component({...})
export class Comp extends Vue {...}
我在浏览器中将 vue.js 作为模块导入:
<script type="module" src="module/vue/vue.js"></script>
但我得到了错误
Uncaught TypeError: Class extends value undefined is not a constructor or null
eval() 内部的某个位置,由 vue-cli-service --target lib 生成。我也将 SFC 作为模块加载:
<script type="module" src="module/comp/comp.js"></script>
作为一种解决方法,我尝试在 comp.js 的顶部添加导入:
import Vue from '/module/vue/vue.js'
import Component from '/module/vue-class-component/vue-class-component.js'
(function webpackUniversalModuleDefinition(root, factory) {
...
但这无济于事。
如何将导入重新连接到将在 Web 服务器上使用的路径?我检查了 webpack 的选项,但只找到了 resolve,这似乎有助于 webpack 在打包时找到东西。我需要一种“输出重写”选项。
请注意,我使用的是 ES 模块,而不是 CommonJS 或 RequireJS。
tsconfig.json:
compilerOptions: {"target": "ES2016", module: "ES2015" }
更新我尝试将最终路径放入 .vue 文件并在 vue.config.js 中使用 configureWebpack.resolve.alias 以允许 Vue 编译器定位模块,但这也不起作用。
vue.config.js:
module.exports = {
runtimeCompiler: true,
configureWebpack: {
externals: [
'module/vue/vue',
'module/vue-class-component/vue-class-component',
],
resolve: {
alias: {
'module/vue/vue': 'vue/dist/vue.esm.js',
'module/vue-class-component/vue-class-component': 'vue-class-component/dist/vue-class-component.esm.js'
}
},
}
}
comp.vue:
...
import Vue from './module/vue/vue'
import Component from 'module/vue-class-component/vue-class-component'
只是给
ERROR in .../src/comp.vue
16:17 Cannot find module 'module/vue/vue'.
【问题讨论】:
-
可以用vue属性装饰器代替“vue-class-component”。从'vue-property-decorator'导入{组件,Vue};
-
@AmithaMahesh 谢谢。那也行不通。
vue-class-component导入不是证明问题所必需的,我只是保留它以表明 Vue 不是唯一的导入,答案也应该适用于其他事情。 -
找不到路径,因为外部设置不正确。它需要指向全局变量而不是路径。
-
我的印象(我可能是错的)是当你使用 ES2015 模块时,没有全局变量。因此出现错误。
标签: ecmascript-6 vuejs2 vue-component