我正在阅读将大量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开始的主要好处之一。
那你怎么解决这个问题呢?
require
或其他)