I'm working on a legacy app in durandal. I noticed when I define a module:
define({
message: 'hello world'
});
Then the output from grunt looks like:
define('filePath\fileName',{
message: 'hello world'
});
Where does filePath\fileName
come from? I tried building a module in plain RequireJS and I had to supply this id myself. I read that Durandal uses a pattern called AMD (Asynchronous Module Definition pattern). Is the filePath\fileName
using fileName.js
convention a part of the AMD pattern?
答案 0 :(得分:1)
AMD优化器在优化模块时添加这些ID。
只要每个文件有一个模块,AMD加载程序就能够从文件路径和模块加载器的配置中推断出模块ID。因此,当每个文件有一个模块从define
调用中省略模块ID时,可以让AMD加载器推断出模块ID。顺便说一下,这被称为“匿名define
。
优化器的一个任务是将多个模块组合在一个文件中。当优化器在同一文件中组合多个模块时,除非优化器也记录此信息,否则无法区分哪个define
调用属于哪个模块。设计AMD规范的方式,记录哪个define
属于哪个模块的方法是将模块ID添加为define
的第一个参数。