定义具有 AMD (requirejs) 和 Common.js (Node.js) 和全局范围依赖项的模块
Define module with dependencies for AMD (requirejs) and Common.js (Node.js) and global scope
我正在尝试创建一个可通过 AMD Common.js 和全局范围访问的函数。我的一个警告是它具有依赖性。 Require.js 和全局范围似乎工作正常,但我无法在 Node.js 中加载依赖项。
(function(global, factory) {
// Node.js
if (typeof exports === 'object' && typeof module !== 'undefined') {
moment = require('moment');
return module.exports = factory();
}
// require.js
else if (typeof define === 'function' && define.amd) {
return define(['moment'], function(moment) {
global.moment = moment;
return factory();
});
}
// global
else {
return global.formatDate = factory();
}
})(this, function() {
var formatDate = function(date, format) {
if (typeof moment !== 'function' && !moment) {
console.error('moment is required to format date')
return date;
}
return moment(date).format(format);
};
return formatDate;
});
不要将依赖项作为全局变量公开,而是将它们作为参数传递给您的工厂。
例如:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define([ 'module', 'moment' ], function (module, moment) {
module.exports = factory(moment);
});
} else if (typeof module === 'object') {
module.exports = factory(require('moment'));
} else {
root.formatDate = factory(root.moment);
}
}(this, function (moment) {
}));
查看通用模块定义 (UMD) 配方
如果有人感兴趣,这是我最后得到的结果:
(function(root, factory) {
// AMD (require.js)
if (typeof define === 'function' && define.amd) {
return define(['moment'], factory);
// CommonJS (Node.js)
} else if (typeof module === 'object' && module.exports) {
return module.exports = factory(require('moment'));
// Browser Globals
} else {
return root.formatDate = factory(root.moment);
}
})(this, function(moment) {
var formatDate = function(date, format) {
return date.format(format);
};
return formatDate;
});
我参考了@Ates Goral 提到的通用模块定义returnExports
我正在尝试创建一个可通过 AMD Common.js 和全局范围访问的函数。我的一个警告是它具有依赖性。 Require.js 和全局范围似乎工作正常,但我无法在 Node.js 中加载依赖项。
(function(global, factory) {
// Node.js
if (typeof exports === 'object' && typeof module !== 'undefined') {
moment = require('moment');
return module.exports = factory();
}
// require.js
else if (typeof define === 'function' && define.amd) {
return define(['moment'], function(moment) {
global.moment = moment;
return factory();
});
}
// global
else {
return global.formatDate = factory();
}
})(this, function() {
var formatDate = function(date, format) {
if (typeof moment !== 'function' && !moment) {
console.error('moment is required to format date')
return date;
}
return moment(date).format(format);
};
return formatDate;
});
不要将依赖项作为全局变量公开,而是将它们作为参数传递给您的工厂。
例如:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define([ 'module', 'moment' ], function (module, moment) {
module.exports = factory(moment);
});
} else if (typeof module === 'object') {
module.exports = factory(require('moment'));
} else {
root.formatDate = factory(root.moment);
}
}(this, function (moment) {
}));
查看通用模块定义 (UMD) 配方
如果有人感兴趣,这是我最后得到的结果:
(function(root, factory) {
// AMD (require.js)
if (typeof define === 'function' && define.amd) {
return define(['moment'], factory);
// CommonJS (Node.js)
} else if (typeof module === 'object' && module.exports) {
return module.exports = factory(require('moment'));
// Browser Globals
} else {
return root.formatDate = factory(root.moment);
}
})(this, function(moment) {
var formatDate = function(date, format) {
return date.format(format);
};
return formatDate;
});
我参考了@Ates Goral 提到的通用模块定义returnExports