打字稿。 KnockoutJs。未捕获的ReferenceError:未定义require

时间:2016-10-16 17:49:08

标签: typescript knockout.js npm

目前我正在关注official ts-ko demo。当我直接引用Ko时:

/// <reference path="./node_modules/@types/knockout/index.d.ts" /> 

没有错误。但是当以下列方式添加引用时:

import * as ko from "knockout";

抛出错误:

  

未捕获的ReferenceError:未定义require

Typescript demo states

  

我们需要抓住Knockout本身以及一个名为RequireJS的东西。

定义RequireJs的正确方法是什么?为什么需要将requirejs用于“导入”案例?

的package.json

  "dependencies": {
    "jquery": "3.1.1",
    "@types/jquery": "2.0.33",
    "knockout": "3.4.0",
    "@types/knockout": "1.1.5"
  }

1 个答案:

答案 0 :(得分:2)

来自RequireJs homepage。 RequireJS是一个JavaScript文件和模块加载器。

  

定义RequireJs的正确方法是什么?

您只需从脚本标记中引用您的RequireJ。

<script src="scripts/require.js" type="text/javascript"></script>

并定义您的requireJs配置。

require.config({
    baseUrl: 'app',
    paths: {
        text: "../scripts/text" //Path to text.js, you will use this to load html that will be used in your ko components,
        widgets: "widgets",
        app: "."
    }
});

然后你可以像这样注册你的组件。

ko.components.register(name, {
    viewModel: { require: path },
    template: { require: 'text!'+ path +'.html' }
});
  

为什么需要将requirejs用于“import”情况?

为了异步加载你的ko组件,你需要一个像RequireJs这样的模块加载器。请参阅此documentation