我有一个单一文件组件,我需要导入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文件,并在configureWebpack.resolve.alias
中使用vue.config.js
来允许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'.
答案 0 :(得分:4)
您可以在configureWebpack
中添加vue.config.js
来修改Webpack的配置,在Webpack中,您可以使用externals
解决此问题。
外部提供了一种导入外部库的方法。
在您的webpack配置中,您将添加一条看起来像这样的行。
以lodash
为例,因为导入和全局变量不同。
// webpack.config
externals: {
'lodash': '_'
}
_
是webpack可以获取的全局变量,而lodash
是它公开的导入内容。
此时,您可以执行类似的操作。
import * as lodash from 'lodash'
要使用此方法进行类型检查,您npm install @types/...
和TypeScript将为该导入选择类型。
您可以阅读有关here的信息,只需将以下内容添加到vue.config.js文件中即可。
// vue.config.js
module.exports = {
configureWebpack: {
externals: {
'lodash': '_'
}
}
}