首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UMD的咕噜试验

UMD的咕噜试验
EN

Stack Overflow用户
提问于 2013-06-05 12:54:29
回答 2查看 4.1K关注 0票数 6

我试图找出使用UMD工厂测试Javascript模块定义的最佳方法,类似于这样:https://github.com/umdjs/umd/blob/master/returnExportsGlobal.js

我不想测试模块本身,我想测试模块在各种环境中是否正确地“导出/创建”:

  1. 如果CommonJS (节点),模块是否正确导出?
  2. 如果AMD,它的定义是否正确?
  3. 如果浏览器(没有要求),是否创建了正确的全局?

我想用咕哝和茉莉花做这些测试。我可以用格罗特-康罗-茉莉花来测试第2点和第3点,但不能测试第1点。

我想我可以使用一种混合的方法来测试正确的模块定义(我还需要弄清楚具体的实现),但感觉非常混乱。

在高层次上,有没有人知道在不使用多个插件的情况下实现这一目标的现有方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-06 22:37:25

最后,我决定使用混合任务,在浏览器全局和浏览器AMD测试中使用grunt-contrib,CommonJS测试使用jasmine_node。我只有一个规范文件,它支持所有3个模块类型的测试。

这是我的咕噜配置:

代码语言:javascript
复制
grunt.initConfig({
  pkg: grunt.file.readJSON('package.json'),
  jasmine: {
    browserGlobal: {
      src: ['src/Foo.js'],
      options: {
        specs: 'spec/**/*.spec.js'
      }
    },
    browserAMD: {
      src: ['src/Foo.js'],
      options: {
        specs: 'spec/**/*.spec.js',
        template: require('grunt-template-jasmine-requirejs')
      }
    }
  },
  jasmine_node: {
    specNameMatcher: 'spec',
    projectRoot: 'spec/'
  }
});

我的茉莉花规范文件现在支持UMD:

代码语言:javascript
复制
(function (root, factory) {
  if (typeof module === 'object' && module.exports) {
    // Node/CommonJS
    factory(
      require('modulename')
    );
  } else if (typeof define === 'function' && define.amd) {
    // AMD
    define([
      'modulename'
    ], factory);
  } else {
    // Browser globals
    factory(root.ModuleName);
  }
}(this, function factory(ModuleName) {

 // Tests here
}));

这是我在我的模块中使用的UMD工厂:

代码语言:javascript
复制
(function (root, factory) {
  if (typeof module === 'object' && module.exports) {
    // Node/CommonJS
    module.exports = factory();
  } else if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module.
    define(factory);
  } else {
    // Browser globals
    root.ModuleName = factory();
  }
}(this, function factory() {


  // public API
  return {
    foo: 'bar'
  };
}));
票数 4
EN

Stack Overflow用户

发布于 2013-12-24 11:52:12

您还可以使用uRequire,并在使用声明性特征时,从所有模块中的UMD样板中保存您自己。

您只需编写普通的AMD或普通的CommonJS模块(或两个模块的混合)并转换为UMD (或者在nodejsWeb/AMD &/Script上运行的rjs优化的),或者在CLI或咕噜中使用简单的构建步骤和配置

所产生的UMD是基于众所周知的模板,如https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js,与各种调整,其中之一是,您可以global

然后,您可以将普通的AMD或commonJS规范转换为UMD和/或“combined.js”,并在浏览器或咕噜-摩卡中同时命中。有关许多琐碎和更高级的示例,请参见uBerscore

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

https://stackoverflow.com/questions/16940548

复制
相关文章

相似问题

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