From cbbd2959994860f19383aa799894f0575c856ea8 Mon Sep 17 00:00:00 2001 From: chencheng Date: Mon, 23 Jun 2014 14:57:05 +0800 Subject: [PATCH 1/3] add glob support for pkg.output --- .gitignore | 2 ++ lib/package.js | 13 ++++++++++++- package.json | 3 ++- test/fixtures/spm/output/c1.js | 1 + test/fixtures/spm/output/glob/c.js | 1 + test/fixtures/spm/output/package.json | 2 +- test/spm.js | 4 ++-- 7 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 test/fixtures/spm/output/c1.js create mode 100644 test/fixtures/spm/output/glob/c.js diff --git a/.gitignore b/.gitignore index ba2a97b..7ef1e6e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ node_modules coverage +.idea +tmp diff --git a/lib/package.js b/lib/package.js index 375b538..94c201a 100644 --- a/lib/package.js +++ b/lib/package.js @@ -6,6 +6,7 @@ var join = path.join; var dirname = path.dirname; var extname = path.extname; var relative = path.relative; +var glob = require('glob'); var requires = require('requires'); var imports = require('css-imports'); var Class = require('arale').Class; @@ -272,7 +273,17 @@ function getEntry(pkg, options) { // base on pkg.output if (Array.isArray(pkg.output) && pkg.output.length) { - entry = entry.concat(pkg.output); + pkg.output.forEach(function(outputGlob) { + // glob support + var items = glob.sync(outputGlob, {cwd:pkg.dest}); + + // handle ./index.js + items = items.map(function(item) { + return item.replace(/^\.\//, ''); + }); + + entry = Array.prototype.concat.apply(entry, items); + }); } } diff --git a/package.json b/package.json index e58df28..3b4603f 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "arale": "~0.2.0", "css-imports": "~0.2.0", "debug": "^0.7.4", + "glob": "^4.0.2", "requires": "~1.0.0", "semver": "~2.3.0" }, @@ -26,4 +27,4 @@ "scripts": { "test": "make test" } -} \ No newline at end of file +} diff --git a/test/fixtures/spm/output/c1.js b/test/fixtures/spm/output/c1.js new file mode 100644 index 0000000..070b1f3 --- /dev/null +++ b/test/fixtures/spm/output/c1.js @@ -0,0 +1 @@ +console.log('c1'); diff --git a/test/fixtures/spm/output/glob/c.js b/test/fixtures/spm/output/glob/c.js new file mode 100644 index 0000000..828c44b --- /dev/null +++ b/test/fixtures/spm/output/glob/c.js @@ -0,0 +1 @@ +require('../c1.js'); \ No newline at end of file diff --git a/test/fixtures/spm/output/package.json b/test/fixtures/spm/output/package.json index 1b5b685..d4ff7c1 100644 --- a/test/fixtures/spm/output/package.json +++ b/test/fixtures/spm/output/package.json @@ -2,6 +2,6 @@ "name": "a", "version": "1.0.0", "spm": { - "output": ["a.js", "b.js"] + "output": ["a.js", "b.js", "./glob/*.js"] } } diff --git a/test/spm.js b/test/spm.js index f40f4b7..5068aa0 100644 --- a/test/spm.js +++ b/test/spm.js @@ -66,8 +66,8 @@ describe('Father.SpmPackage', function() { it('output', function() { var pkg = getPackage('output'); - pkg.output.should.eql(['a.js', 'b.js']); - Object.keys(pkg.files).should.eql(['index.js','a.js', 'a1.js', 'b.js', 'b1.js']); + pkg.output.should.eql(['a.js', 'b.js', './glob/*.js']); + Object.keys(pkg.files).should.eql(['index.js','a.js', 'a1.js', 'b.js', 'b1.js', 'glob/c.js', 'c1.js']); }); it('resolve deps', function() { From 99bf5439c6e4f444e3fdb940d8bb708addfaccc7 Mon Sep 17 00:00:00 2001 From: chencheng Date: Thu, 26 Jun 2014 11:19:51 +0800 Subject: [PATCH 2/3] code style --- lib/package.js | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/package.js b/lib/package.js index 94c201a..77efd7d 100644 --- a/lib/package.js +++ b/lib/package.js @@ -281,8 +281,8 @@ function getEntry(pkg, options) { items = items.map(function(item) { return item.replace(/^\.\//, ''); }); - - entry = Array.prototype.concat.apply(entry, items); + + entry = entry.concat(items); }); } } diff --git a/package.json b/package.json index 3b4603f..ef0c31a 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "dependencies": { "arale": "~0.2.0", "css-imports": "~0.2.0", - "debug": "^0.7.4", - "glob": "^4.0.2", + "debug": "~0.7.4", + "glob": "~4.0.2", "requires": "~1.0.0", "semver": "~2.3.0" }, From 438c1650575926bacac3d922ce3f705af20ec5af Mon Sep 17 00:00:00 2001 From: chencheng Date: Thu, 26 Jun 2014 11:25:24 +0800 Subject: [PATCH 3/3] add testcase for duplicate glob ouput --- test/fixtures/spm/output-glob-duplicate/a.js | 1 + test/fixtures/spm/output-glob-duplicate/package.json | 7 +++++++ test/spm.js | 6 ++++++ 3 files changed, 14 insertions(+) create mode 100644 test/fixtures/spm/output-glob-duplicate/a.js create mode 100644 test/fixtures/spm/output-glob-duplicate/package.json diff --git a/test/fixtures/spm/output-glob-duplicate/a.js b/test/fixtures/spm/output-glob-duplicate/a.js new file mode 100644 index 0000000..8609d07 --- /dev/null +++ b/test/fixtures/spm/output-glob-duplicate/a.js @@ -0,0 +1 @@ +console.log('a'); diff --git a/test/fixtures/spm/output-glob-duplicate/package.json b/test/fixtures/spm/output-glob-duplicate/package.json new file mode 100644 index 0000000..59ea49e --- /dev/null +++ b/test/fixtures/spm/output-glob-duplicate/package.json @@ -0,0 +1,7 @@ +{ + "name": "a", + "version": "1.0.0", + "spm": { + "output": ["a.js", "./*.js"] + } +} diff --git a/test/spm.js b/test/spm.js index 5068aa0..bd31726 100644 --- a/test/spm.js +++ b/test/spm.js @@ -70,6 +70,12 @@ describe('Father.SpmPackage', function() { Object.keys(pkg.files).should.eql(['index.js','a.js', 'a1.js', 'b.js', 'b1.js', 'glob/c.js', 'c1.js']); }); + it('output glob duplicate', function() { + var pkg = getPackage('output-glob-duplicate'); + pkg.output.should.eql(['a.js', './*.js']); + Object.keys(pkg.files).should.eql(['a.js']); + }); + it('resolve deps', function() { var pkg = getPackage('resolve-deps'); pkg.files['src/c.js'].dependencies.should.eql(['../a.js', '../b.js', './d.js']);