首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将CommonJS转换为AMD

将CommonJS转换为AMD
EN

Stack Overflow用户
提问于 2015-06-23 19:14:38
回答 1查看 3K关注 0票数 2

我在NPM和Bower上发布了一个简单的CommonJS模块,基本上如下所示:

代码语言:javascript
复制
  function Foo(){}

    module.exports = new Foo();

现在,转换为AMD格式的最简单方法就是发布第二个版本,与AMD兼容,如下所示:

代码语言:javascript
复制
define(function (require, exports, module) {

    function Foo(){}

    module.exports = new Foo();

});

但是,我认为有一种方法可以使用CommonJS模块使用requirejs.config,如下所示:

代码语言:javascript
复制
requirejs.config({

   paths:{
    'foo':'assets/vendor/foo'
   },
   shim:{

     'foo' :{
       exports: 'Foo'
      }
   }
});

但这似乎行不通。我认为垫片工具做了我上面为你做的包装,但我不完全确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-24 10:55:38

问题

shim不能做你想做的那么多。当RequireJS计算您在exports中给出的符号时,它会在全局空间中计算它。因此,如果您可以访问要从全局空间导出的变量,那么使用exports可以工作得很好。如果库fooFoo导出到全局空间,则工作正常。

您要做的是让一个模块通过moduleshim一起导出其API。这不能工作,因为RequireJS无法猜测正在加载的模块需要全局module对象已经对正在加载的模块可用。在最简单的情况下,加载这样的模块将导致ReferenceError,因为module不存在。有一些方法可以在最简单的情况下伪造module.exports,但它并不是一个通用的解决方案。

解决方案

您可以使用r.js将以CommonJS格式编写的文件转换为RequireJS所需的文件。是记录在这里。文件给出了以下简要说明:

代码语言:javascript
复制
node r.js -convert path/to/commonjs/modules/ path/to/output

您还应该阅读自述文件的这部分,以获得一些注意事项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31011539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档