我想将模块发布到多个组件管理器系统:npmjs,bower等...我还想创建可下载的版本,例如一个用于requirejs的AMD样式,一个用于commonJS样式,一个用于浏览器中的全局命名空间,为每个命名空间缩小等等......这些超过10个版本。
我目前只有一个AMD版本,我用amd风格的karma,jasmine和requirejs为它编写单元测试。你有什么建议,如何为它们生成其他构建和测试?
我的意思是我不能决定我应该作为转换的基础。每个输出包都有一个共同的部分,并且还有一个包依赖部分。
AMD - requirejs(我不确定使用配置选项)
define(["module", "dependency"], function (module, dependency) {
var m = {
config: function (options){
//...
},
//...
//do something with the dependency
};
m.config(module.config()); //load config options set by require.config()
return m;
});
CommonJS的
var dependency = require("dependency");
module.exports = {
config: function (options){
//...
},
//...
//do something with the dependency
};
全球
var m = (function (){
return {
config: function (options){
//...
},
//...
//do something with the dependency
};
})(dependency);
我不知道,我应该在每次测试之前开发公共代码并构建,还是应该开发其中一个软件包,对其进行测试,然后将其转换为其他版本?
我打算在自动发布之前使用gulp创建构建并自动为每个构建测试单元测试。哦,我还需要更改自动版本号。顺便说一句。是否有必要在建造程序后调用单元测试,您如何看待?我只是想确定,没有发布错误的代码......
答案 0 :(得分:0)
gulp有转换库:
因此很容易将一种包格式转换为另外两种格式。这可以通过测试和代码完成。 commonjs可以用node和jasmine-node测试,标准js可以用karma和jasmine测试,amd可以用karma,requirejs和jasmine测试。
创建公共描述符并在每次测试之前转换它是一个糟糕的选择。我不想创建另一种语言,如coffeescript等...所以包之间的转换是可以的。
在发布之前调用单元测试是可以的。没有其他常见的包类型,因此这3个包对于我将使用的每个组件管理器都是足够的。
我不确定版本控制。手动设置并不难,但也许像travis或maven这样的系统可以帮助更多......我会找出并编辑这个答案。