允许JS组件在浏览器commonJS env和默认情况下工作(作为窗口全局)

时间:2014-03-28 10:12:49

标签: javascript requirejs client-side dependency-management commonjs

我正在阅读将大量javascript文件重新打包为CommonJS组件。 但是出于各种原因(单元测试会浮现在脑海中)我希望这些组件也可以在默认的浏览器环境中工作(即:可能通过将组件附加到window并使用一些商定的命名空间等)。

为实现这一目标,我见过以下内容:

window.app = window.app || {};
var DetectStrategy = function(){
   ....
}
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
    module.exports = DetectStrategy;
}else{
    window.app.DetectStrategySimple = DetectStrategy;
}

这样可以正常工作,但如果在模块内部我需要另一个模块,则会出现故障:require在默认浏览器环境中不可用。

window.app = window.app || {};
var DetectStrategy = function(){
   var relatedModule = require("./someOtherModule);
   ...
}
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
    module.exports = DetectStrategy;
}else{
    window.app.DetectStrategySimple = DetectStrategy;
}

这失败是完全合乎逻辑的,但是它有点失败了试图让模块在两种环境中都能工作的目的。毕竟,能够调用require(及其依赖管理的相关好处)是使用CommonJS开始的主要好处之一。

那你怎么解决这个问题呢?

  • 能够在COmmonJS和默认环境中使用客户端上的模块(用于测试)
  • 利用依赖关系管理(通过require或其他)

0 个答案:

没有答案