在我将设置应用于require.config的文件中,我还放置了其他设置,其中包括使用typescript的导出功能导入视图模型。我注意到它在所有浏览器中产生错误:
requireConfig.ts
import HomePage from "Custom/HomePage";
require.config
({
baseUrl: "/Scripts/",
paths: {},
shim: {}
});
require (["Custom/Initialisation/ConfigOnDocReady"]);
Uncaught TypeError: require.config is not a function
at Object.<anonymous> (RequireConfig.ts:3)
当我删除第1行时,它可以正常工作。是什么造成的?我认为这是一个了解requireJs幕后背后的好机会。
答案 0 :(得分:1)
RequireJS在本地和全球范围内提供require
。您在本地提供的config
上呼叫require
。本地require
没有config
方法,您会收到错误消息。您应该在全局要求上调用config
。 RequireJS将全局require
的别名导出为requirejs
,或者您可以window.require
的形式访问该地址。
require
来电 RequireJS提供了require
的两个访问点:全局访问和本地访问。在浏览器中,全局空间导出到全局空间window
。如果您在调用require
时特别请求它作为依赖关系列表中的模块,则会提供本地define
。调用define
是使用AMD加载器注册AMD模块的标准方法(这就是RequireJS所针对的)。这里回调的参数是本地require
:
define(['require'], function (require) {
});
(如果您完全省略了依赖项列表,它也会自动提供给回调,但此方案不需要在此处扣留我们。)
本地require
未提供config
方法。如果这样做是没有意义的,因为调用config
具有全局效应。例如,没有规定仅为上下文中的某些模块而不是其他模块更改baseUrl
。因此,RequireJS仅在全局config
上提供require
方法。
&#34;但是等等#34;,你说,&#34;我没有在任何地方拨打define
!&#34;
不,但是TypeScript会发出调用define
的代码。
删除import
时,您的代码有效,因为TypeScript根据是否存在显着不同的代码:
如果您拥有import
语句,那么您的代码将包含在与上面显示的define
相似的类似的内容中,因此,您拨打require
的电话是对本地的电话。 (define
生成的tsc
包装器更复杂,但这里并不重要。)
如果没有import/export
个语句,则代码被视为&#34;脚本&#34;和TypeScript不会输出任何与模块相关的代码。特别是,我发布的代码没有上面显示的define
包装,而您对require
的调用是对全球的调用之一。
如果要从模块内部更改配置,则应该注意调用全局require
。 RequireJS也在requirejs
别名下导出它。所以你可以致电requirejs.config
。或者,您可以window
window.require
明确地访问它。