gpt4 book ai didi

javascript - SystemJS 的引用错误

转载 作者:行者123 更新时间:2023-12-03 02:56:15 26 4
gpt4 key购买 nike

我使用 SystemJS 作为模块系统来编译 TypeScript 文件,但每当我在浏览器中加载页面时(通过 live-server ),我都会收到以下错误:

ReferenceError: Sensor is not defined
at (index):17
at <anonymous>

这是我的 index.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Sensor</title>
</head>
<body>

<input type="text" id="textField"/>
<p id="text"></p>

<script src="node_modules/systemjs/dist/system.js"></script>
<script>
SystemJS.import('dist/index.js').then( function() {
var textField = new Sensor(document.getElementById('textField')).setName('textField');
}).catch(function(err) { console.log(err); });
</script>
</body>
</html>

这是我的 tsconfig.json 文件:

{
"compileOnSave": true,
"compilerOptions": {
"module": "system",
"target": "es5",
"outFile": "dist/index.js"
},
"files": [
"./src/sensor.ts",
"./src/signal.ts",
"./src/signal_receiver.ts"
]
}

我检查了输出文件,它看起来像传感器定义:

System.register("sensor", ["signal", "signal_receiver"], function (exports_3, context_3) {
...
exports_3("Sensor", Sensor);

编辑:我现在检查了,当我尝试调用它们时,没有定义任何函数。

最佳答案

我发现您的代码存在两个问题。一是您正在使用 bundle ,但您的代码忽略了这一点。其次,您没有从模块中获取 Sensor 类,而是从全局空间中获取它。

tsc 生成的代码中,对 System.register 的调用将 "sensor" 作为第一个参数,这意味着您正在处理一个 bundle 。这种调用硬编码了模块名称,这里的模块名称是“sensor”。 SystemJS 包可以使用 script 元素加载,因此您可以在加载 SystemJS 后添加此元素:

<script src="dist/index.js"></script>

这将加载整个包并使其中的所有模块可供使用。

然后,为模块生成的代码将 Sensor 类导出为模块上的 Sensor 字段。 (这就是代码 exports_3("Sensor", Sensor) 的作用。)因此,当您使用它时,您需要从模块中获取它。所以代码应该是:

SystemJS.import('sensor').then(function(sensor) {
var textField = new sensor.Sensor(document.getElementById('textField')).setName('textField');
}).catch(function(err) { console.log(err); });

在此代码中,我要求 SystemJS 加载名为 "sensor" 的模块,该模块与 System.register 使用的名称相同,并且我添加了将 sensor 添加到传递给 .then 的回调的参数列表,并将该类引用为 sensor.Sensor

关于javascript - SystemJS 的引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47602125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com