diff --git a/bin/spm-build b/bin/spm-build index 44bc39fe..a4cb5f6c 100755 --- a/bin/spm-build +++ b/bin/spm-build @@ -19,6 +19,7 @@ commander .option('--ignore [ignore]', 'determine which id will not be transported') .option('--skip [skip]', 'determine which id will not be parsed when analyse') .option('--idleading [idleading]', 'prefix of module name, default: {{name}}/{{version}}') + .option('--with-deps', 'build package in dependencies') .option('--zip', 'archive by zip') .parse(process.argv); @@ -46,6 +47,7 @@ var args = { idleading: commander.idleading, zip: commander.zip, force: commander.force, + withDeps: commander.withDeps, install: true }; diff --git a/lib/build.js b/lib/build.js index 319b0c62..fb6cff0a 100644 --- a/lib/build.js +++ b/lib/build.js @@ -70,6 +70,17 @@ function build(args, cb) { // check duplicate pkgs checkDuplicate(files, pkg); + // build package in dependencies + if (args.withDeps) { + var depPkgs = pkg.getPackages(); + for (var id in depPkgs) { + files = files.concat(getFiles(depPkgs[id]).map(function(f) { + return 'sea-modules/'+id.replace('@','/')+'/' + f; + })); + } + log.info('withDeps', 'files: ' + files); + } + // define task defineCleanTask(args); defineBuildTask(files, args); diff --git a/tests/build.js b/tests/build.js index 57ee8aa4..c77ee40a 100644 --- a/tests/build.js +++ b/tests/build.js @@ -243,6 +243,19 @@ describe('build', function() { }); }); + it('js package with deps', function(done) { + var opt = { + cwd: join(base, 'build-js'), + dest: dest, + withDeps: true + }; + build(opt, function(err) { + should.not.exist(err); + assets('build-js-with-deps', dest); + done(); + }); + }); + function assets(prefix, dest) { var expect = join(base, 'expect', prefix); glob.sync('**/*', {cwd: expect}) diff --git a/tests/build/expect/build-js-with-deps/a/1.0.0/index-debug.js b/tests/build/expect/build-js-with-deps/a/1.0.0/index-debug.js new file mode 100644 index 00000000..cbe79df4 --- /dev/null +++ b/tests/build/expect/build-js-with-deps/a/1.0.0/index-debug.js @@ -0,0 +1,8 @@ +define("a/1.0.0/index-debug", ["b/1.1.0/src/b-debug", "c/1.1.1/index-debug", "d/0.1.0/index-debug", "d/0.1.1/index-debug"], function(require, exports, module) { + require("a/1.0.0/relative-debug"); + require("d/0.1.1/index-debug"); +}); +define("a/1.0.0/relative-debug", ["b/1.1.0/src/b-debug", "c/1.1.1/index-debug", "d/0.1.0/index-debug"], function(require, exports, module) { + console.log('relative'); + require("b/1.1.0/src/b-debug"); +}); \ No newline at end of file diff --git a/tests/build/expect/build-js-with-deps/a/1.0.0/index.js b/tests/build/expect/build-js-with-deps/a/1.0.0/index.js new file mode 100644 index 00000000..726a2a68 --- /dev/null +++ b/tests/build/expect/build-js-with-deps/a/1.0.0/index.js @@ -0,0 +1 @@ +define("a/1.0.0/index",["b/1.1.0/src/b","c/1.1.1/index","d/0.1.0/index","d/0.1.1/index"],function(e){e("a/1.0.0/relative"),e("d/0.1.1/index")}),define("a/1.0.0/relative",["b/1.1.0/src/b","c/1.1.1/index","d/0.1.0/index"],function(e){console.log("relative"),e("b/1.1.0/src/b")}); \ No newline at end of file diff --git a/tests/build/expect/build-js-with-deps/b/1.1.0/src/b-debug.js b/tests/build/expect/build-js-with-deps/b/1.1.0/src/b-debug.js new file mode 100644 index 00000000..71d5bf92 --- /dev/null +++ b/tests/build/expect/build-js-with-deps/b/1.1.0/src/b-debug.js @@ -0,0 +1,7 @@ +define("b/1.1.0/src/b-debug", ["c/1.1.1/index-debug", "d/0.1.0/index-debug"], function(require, exports, module) { + require("c/1.1.1/index-debug"); + require("b/1.1.0/src/b-debug.tpl"); +}); +define("b/1.1.0/src/b-debug.tpl", [], function(require, exports, module) { + module.exports = '
'; +}); \ No newline at end of file diff --git a/tests/build/expect/build-js-with-deps/b/1.1.0/src/b.js b/tests/build/expect/build-js-with-deps/b/1.1.0/src/b.js new file mode 100644 index 00000000..a4656b1b --- /dev/null +++ b/tests/build/expect/build-js-with-deps/b/1.1.0/src/b.js @@ -0,0 +1 @@ +define("b/1.1.0/src/b",["c/1.1.1/index","d/0.1.0/index"],function(i){i("c/1.1.1/index"),i("b/1.1.0/src/b.tpl")}),define("b/1.1.0/src/b.tpl",[],function(i,n,d){d.exports="
"}); \ No newline at end of file diff --git a/tests/build/expect/build-js-with-deps/c/1.1.1/index-debug.js b/tests/build/expect/build-js-with-deps/c/1.1.1/index-debug.js new file mode 100644 index 00000000..a2e01f37 --- /dev/null +++ b/tests/build/expect/build-js-with-deps/c/1.1.1/index-debug.js @@ -0,0 +1,3 @@ +define("c/1.1.1/index-debug", ["d/0.1.0/index-debug"], function(require, exports, module) { + require("d/0.1.0/index-debug"); +}); \ No newline at end of file diff --git a/tests/build/expect/build-js-with-deps/c/1.1.1/index.js b/tests/build/expect/build-js-with-deps/c/1.1.1/index.js new file mode 100644 index 00000000..30392706 --- /dev/null +++ b/tests/build/expect/build-js-with-deps/c/1.1.1/index.js @@ -0,0 +1 @@ +define("c/1.1.1/index",["d/0.1.0/index"],function(d){d("d/0.1.0/index")}); \ No newline at end of file diff --git a/tests/build/expect/build-js-with-deps/d/0.1.0/index-debug.js b/tests/build/expect/build-js-with-deps/d/0.1.0/index-debug.js new file mode 100644 index 00000000..2c4f3b58 --- /dev/null +++ b/tests/build/expect/build-js-with-deps/d/0.1.0/index-debug.js @@ -0,0 +1,5 @@ +define("d/0.1.0/index-debug", [], function(require, exports, module) { + exports.d = function() { + console.log('0.1.0'); + }; +}); \ No newline at end of file diff --git a/tests/build/expect/build-js-with-deps/d/0.1.0/index.js b/tests/build/expect/build-js-with-deps/d/0.1.0/index.js new file mode 100644 index 00000000..dd15667b --- /dev/null +++ b/tests/build/expect/build-js-with-deps/d/0.1.0/index.js @@ -0,0 +1 @@ +define("d/0.1.0/index",[],function(n,o){o.d=function(){console.log("0.1.0")}}); \ No newline at end of file diff --git a/tests/build/expect/build-js-with-deps/d/0.1.1/index-debug.js b/tests/build/expect/build-js-with-deps/d/0.1.1/index-debug.js new file mode 100644 index 00000000..2965a214 --- /dev/null +++ b/tests/build/expect/build-js-with-deps/d/0.1.1/index-debug.js @@ -0,0 +1,5 @@ +define("d/0.1.1/index-debug", [], function(require, exports, module) { + exports.d = function() { + console.log('0.1.1'); + }; +}); \ No newline at end of file diff --git a/tests/build/expect/build-js-with-deps/d/0.1.1/index.js b/tests/build/expect/build-js-with-deps/d/0.1.1/index.js new file mode 100644 index 00000000..ff646c87 --- /dev/null +++ b/tests/build/expect/build-js-with-deps/d/0.1.1/index.js @@ -0,0 +1 @@ +define("d/0.1.1/index",[],function(n,o){o.d=function(){console.log("0.1.1")}}); \ No newline at end of file