在 nuxt 项目的 vue 文件中通过 import 引入 recorder-core
// 引入js库
import Recorder from '@/static/recorder/recorder-core'
// 引入需要使用到的音频格式编码引擎的js文件
import '@/static/recorder/engine/wav'
但是这种方法会报错:window is not defind
报错原因:要引入的脚本里面用到了 window,nuxt.js 会在服务端渲染页面,在 mounted 生命周期之前都是在服务器端执行,服务端并没有window 或 document
解决方法:
1. 方法一:可以在 mounted 生命周期引入脚本,就可以使用window、document 等对象
mounted() {
require('@/static/recorder/recorder-core')
require('/static/recorder/engine/wav')
}
2. 通过script标签引入脚本,mounted 周期时再加载 script 标签
<div v-if="loadRecorderJs">
<recorder-core />
<wav />
</div>
export default {
name: 'ASRHandler',
components: {
'recorder-core': {
render(createElement) {
return createElement(
'script',
{
attrs: {
type: 'text/javascript',
src: require('../static/recorder/recorder-core.js')
}
})
}
},
'wav': {
render(createElement) {
return createElement(
'script',
{
attrs: {
type: 'text/javascript',
src: require('@/static/recorder/engine/wav.js')
}
})
}
}
},
data() {
return {
loadRecorderJs: false
}
},
mounted() {
this.loadRecorderJs = true
}
不推荐使用第二种方法,有点麻烦