Where does the module id come from in Durandal?

时间:2016-10-19 13:38:51

标签: javascript requirejs durandal

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?

1 个答案:

答案 0 :(得分:1)

AMD优化器在优化模块时添加这些ID。

只要每个文件有一个模块,AMD加载程序就能够从文件路径和模块加载器的配置中推断出模块ID。因此,当每个文件有一个模块从define调用中省略模块ID时,可以让AMD加载器推断出模块ID。顺便说一下,这被称为“匿名define

优化器的一个任务是将多个模块组合在一个文件中。当优化器在同一文件中组合多个模块时,除非优化器也记录此信息,否则无法区分哪个define调用属于哪个模块。设计AMD规范的方式,记录哪个define属于哪个模块的方法是将模块ID添加为define的第一个参数。