Javascript 为什么Tone JS在苗条的组件中表现不好?

Javascript 为什么Tone JS在苗条的组件中表现不好?,javascript,rollupjs,svelte,svelte-component,Javascript,Rollupjs,Svelte,Svelte Component,我是Svelte的新手(在第3版正式发布之前我一直在使用第2版),我正在建立一个网站,旨在做一些音频分析(FFT)。因此,我将古老的ToneJS库()合并到我的一个组件中 出于某种原因,仅仅导入ToneJS就足以使整个应用程序崩溃 以下是我的苗条部分的全部内容: <h2>Pitch analyser</h2> <script> import Tone from 'tone'; </script> 俯仰分析器 从“音调”导入音调;

我是Svelte的新手(在第3版正式发布之前我一直在使用第2版),我正在建立一个网站,旨在做一些音频分析(FFT)。因此,我将古老的ToneJS库()合并到我的一个组件中

出于某种原因,仅仅导入ToneJS就足以使整个应用程序崩溃

以下是我的苗条部分的全部内容:

<h2>Pitch analyser</h2>


<script>
    import Tone from 'tone';

</script>
俯仰分析器
从“音调”导入音调;
这会导致以下错误:

Tone.js:7 Uncaught TypeError: Cannot assign to read only property 'listener' of object '#<AudioContext>'
at t.Context.set (Tone.js:7)
at t.Listener.<anonymous> (Tone.js:7)
at Function.e.getContext (Tone.js:7)
at new t.Listener (Tone.js:7)
at Object.<anonymous> (Tone.js:7)
at Object.<anonymous> (Tone.js:7)
at i (Tone.js:1)
at Object.<anonymous> (Tone.js:7)
at i (Tone.js:1)
at Tone.js:1
Tone.js:7未捕获类型错误:无法分配给对象“#”的只读属性“listener”
在t.Context.set(Tone.js:7)
在t.Listener。(Tone.js:7)
在Function.e.getContext(Tone.js:7)
在新的t.Listener(Tone.js:7)
反对。(Tone.js:7)
反对。(Tone.js:7)
at i(Tone.js:1)
反对。(Tone.js:7)
at i(Tone.js:1)
at Tone.js:1
这可能不是特定于Svelte的,但我在许多其他项目(包括inside React等)中成功地使用了Tone JS,没有任何问题


这可能是什么原因造成的?如何在我的苗条应用程序中开始使用ToneJS?(使用Rollup打包/传输)

之所以会出现这种情况,是因为Rollup作为本机JavaScript模块绑定器,必须将所有JS视为处于严格模式(因为JavaScript模块总是严格的),即使它们是从旧格式转换而来的

不幸的是,Tone.js所做的事情违反了严格模式(分配给不可写属性)。我建议对该回购协议进行发行;严格模式更快、更安全,因此没有理由不支持严格模式环境


同时,您可以通过将Tone.js作为常规的
标记并在应用程序中作为全局标记引用来解决此问题。

简介:
行放入
rollup.config.js
为我修复了它:

output: {
    sourcemap: true,
    format: 'iife',
    name: 'app',
    file: 'public/bundle.js',
    // Added this line:
    intro: 'var global = typeof self !== undefined ? self : this;'
},

似乎在使用webpack时,不会出现此问题。所以一定是rollup打包到EJS的方式有问题。似乎问题不在rollup方面。