未捕获的ReferenceError:define未定义typescript

时间:2016-08-07 19:16:10

标签: javascript knockout.js typescript requirejs

我是打字稿,淘汰赛和requirejs的新手。我用这个文件创建了一些demo。现在,我想使用typescript和knockoutjs实现一些次要的逻辑。

我创建了4-5个打字稿文件,这些文件是在内部导入的。当我运行html文件。我收到错误说明。标题为

enter image description here 有人可以帮我解决这个错误。我在这段代码中遗漏了什么。

搜索谷歌并花了很多时间,但没有找到合适的解决方案。必须与requireJS相关才能定义所有模块。但是,由于requireJS中的新功能无法赶上。我也搜索了类似错误的stackoverflow,但它并没有帮助我。

等待解决方案

1 个答案:

答案 0 :(得分:22)

在这里,您的TypeScript已经愉快地编译为在requireJS环境中工作的代码(技术上,AMD环境)。这意味着它生成的输出假定define / require等都已存在。

总体答案是,在依赖编译代码之前,需要包含RequireJS。

值得注意的是,错误表明您犯了一个单独的错误:您直接依赖于RequireJS模块脚本(即您的HTML中有<script src="my-compiled-code.js"></script>标记)。这不是需要模块工作的方式。相反,一旦你使RequireJS可用,你应该有一个顶级启动脚本(在HTML中内联或作为一个单独的文件)配置RequireJS然后require()的顶级文件你的应用程序启动一切。您可以手动加载此文件,也可以使用RequireJS的“data-main”属性加载此文件。

例如,最小的HTML看起来像:

<!DOCTYPE html>
<html>
    <head>
        <script data-main="scripts/main" src="scripts/require.js"></script>
    </head>
    <body>
    </body>
</html>

从'scripts / require.js'加载RequireJS然后告诉它在'scripts / main.js'加载脚本以开始加载过程(你可能想要更新两个路径 - 注意数据-main不需要.js扩展名)。

主脚本应该是非常简单的:

// Set up any config you need (you might not need this)
requirejs.config({
  basePath: "/scripts"
});

// Tell RequireJS to load your main module (and its dependencies)
require("mainmodule");

一般来说,这不是你在这里遇到的TypeScript问题,而是RequireJS。我尝试花费更多的时间玩只需要(可能是纯JavaScript,所以它更清晰)并查看工作示例,所以你可以先让它工作,然后添加其余部分。