1

我可以让bar某个包的子模块foo被称为requirejsas foo/bar,但我能以某种方式让它使用该名称foo.bar吗?(这与我们预先存在的约定一致,其中bar模块实际上是foo对象的属性。IOW,所需的名称 foo.bar实际上反映了bar作为属性的状态foo。)

(当然,foobar和下面的所有代码只是玩具示例。)

的内容js/main.js是:

requirejs.config({
  baseUrl: 'js/lib',
  packages: ['foo'],
  paths: { ext: '../ext' }
});

requirejs(['foo', 'foo/bar'],
  function(foo, bar) {
    debugger;
  }
);

define对in的调用foo/bar.js是这样的:

define('foo/bar', ['foo'], function (foo) { return foo.bar = {} });

如果我将 的调用中js/foo/bar.js的第一个参数更改为,代码仍会运行,但现在函数将作为其第二个参数。(当然,我仍然可以通过访问,因为该文件像以前一样执行。)define'foo.bar'js/main.jsundefinedbarfoo.barfoo/bar.js


这是迄今为止我所拥有的更全面的总结:

目录结构:

/.
|-- index.html
`-- js
    |-- ext
    |   `-- require.js
    |-- lib
    |   `-- foo
    |       |-- bar.js
    |       `-- main.js
    `-- main.js

HTML:

<script data-main="js/main.js" src="js/ext/require.js"></script>

./js/main.js

requirejs.config({
  baseUrl: 'js/lib',
  packages: ['foo'],
  paths: { ext: '../ext' }
});

requirejs(['foo', 'foo/bar'],
  function(foo, bar) {
    debugger;
  }
);

./js/foo/main.js

define(function () { return {} });

./js/foo/bar.js

define('foo/bar', ['foo'], function (foo) { return foo.bar = {} });
4

0 回答 0