requirejs是否需要所有JS文件来支持AMD

requirejs是否需要所有JS文件来支持AMD,requirejs,amd,Requirejs,Amd,我很少读关于它的书,也试着去理解它 我想知道的是: 我应该像模块模式那样以特定的方式或模式构建我的文件吗 使用库时,这些文件是否支持AMD 非常感谢你的帮助 您可以按自己认为合适的方式组织文件。在加载require.js的脚本标记的data main属性中引用的RequireJS。从该文件中,您可以自由地要求任何您想要的模块 库不需要支持AMD。您可以使用加载将值导出到全局范围的模块(即普通javascript文件) 我主要是建立一个require.js项目,其结构如下: 根 js 模块类

我很少读关于它的书,也试着去理解它

我想知道的是:

  • 我应该像模块模式那样以特定的方式或模式构建我的文件吗
  • 使用库时,这些文件是否支持AMD
  • 非常感谢你的帮助

  • 您可以按自己认为合适的方式组织文件。在加载require.js的脚本标记的
    data main
    属性中引用的RequireJS。从该文件中,您可以自由地要求任何您想要的模块

  • 库不需要支持AMD。您可以使用加载将值导出到全局范围的模块(即普通javascript文件)


  • 我主要是建立一个require.js项目,其结构如下:

      • js
        • 模块类型1
          • mod1
          • mod2
        • 模块类型2
          • mod1
          • mod2
        • app.js
        • bootstrap.js
      • 解放党
        • 要求
          • require.js
        • lib1
          • lib1.js
      • css/img/partials/
      • index.html
    一个初始的bootstrap.jsa有一个
    require.config
    对象和一个初始的
    require

    /*global define, require */
    
    require.config({
        baseUrl: 'js',
        paths: {
          lib1: '../lib/lib1/lib1'
        },
        shim: {
          lib1: ['something']
        } 
    });
    require(['lib1', 'app'], function (lib1, app) {
       app.doSth();
    });
    
    在html页面中,您只需要一个带有
    数据主属性的
    脚本
    标记:

    <body>
        ...
        <script type="text/javascript" src="lib/require/require.js" data-main="js/bootstrap"></script>
    </body>
    
    
    ...
    

    编辑:模块不必与AMD兼容,但如果它们由您自己控制,最好使它们与AMD兼容。您可以使用
    require.config
    中的属性使第三方非AMD库可加载

    所以我想说清楚。例如,如果我想使用任何不支持AMD或不实现模块模式的库,我只需要使用它们就能使用它们??大部分是的。非AMD脚本将被附加到全局范围,就像它们在没有RequireJS的情况下一样。这意味着它们将与AMD模块和其他库一起工作,但是由于全局(窗口)对象被污染,您无法获得模块模式的“纯度”。我使用它,它可以工作。一个例外是库不能只导出一个对象。如果使用shim exports回调函数将它们包装到一个导出对象中,则仍然可以将它们与AMD一起使用。虽然很笨重,但图书馆很少有这样的工作方式。最后一件事。shim exports回调函数的用途是什么?解析模块时会调用回调函数(在shim配置中称为“init”)。无论您从该函数返回什么,都是模块在导入时将返回的内容。请参阅我在答案中链接的文档。我正在用手机回复,所以现在链接起来不太容易:P