From 8b1d52304e3ab4e1c24b0718e8c1324a1b901fd9 Mon Sep 17 00:00:00 2001 From: Lincoln de Sousa Date: Sun, 7 Jun 2015 04:30:12 -0400 Subject: [PATCH 1/3] Introduce overrides for `main` Debowerify doesn't really help if the bower package doesn't declare the right files in the `main` section of their bower.json file. This patch introduces the `overrides` section that allows the user declaring dependencies to override the main section of the bower.json file of the package they depend on. This strategy was copied from `main-bower-files`: https://github.com/ck86/main-bower-files#options --- bower.json | 15 ++++++++++- bower_components/test-package-d/.bower.json | 9 +++++++ bower_components/test-package-d/bower.json | 6 +++++ bower_components/test-package-d/main.js | 1 + bower_components/test-package-e/.bower.json | 10 +++++++ bower_components/test-package-e/bower.json | 7 +++++ bower_components/test-package-e/main.js | 1 + bower_components/test-package-e/main.min.js | 1 + index.js | 6 +++-- public/overrides.js | 1 + public/overrides2.js | 1 + test/fixtures/test-package-d/bower.json | 6 +++++ test/fixtures/test-package-d/main.js | 1 + test/fixtures/test-package-e/bower.json | 7 +++++ test/fixtures/test-package-e/main.js | 1 + test/fixtures/test-package-e/main.min.js | 1 + test/index.js | 29 ++++++++++++++++++++- 17 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 bower_components/test-package-d/.bower.json create mode 100644 bower_components/test-package-d/bower.json create mode 100644 bower_components/test-package-d/main.js create mode 100644 bower_components/test-package-e/.bower.json create mode 100644 bower_components/test-package-e/bower.json create mode 100644 bower_components/test-package-e/main.js create mode 100644 bower_components/test-package-e/main.min.js create mode 100644 public/overrides.js create mode 100644 public/overrides2.js create mode 100644 test/fixtures/test-package-d/bower.json create mode 100644 test/fixtures/test-package-d/main.js create mode 100644 test/fixtures/test-package-e/bower.json create mode 100644 test/fixtures/test-package-e/main.js create mode 100644 test/fixtures/test-package-e/main.min.js diff --git a/bower.json b/bower.json index b3ae302..4ecf30b 100644 --- a/bower.json +++ b/bower.json @@ -2,11 +2,24 @@ "name": "debowerify-test", "verision": "0.0.0", "dependencies": { - "js-base64": "~2.1.2" + "js-base64": "~2.1.2", + "test-package-d": "./test/fixtures/test-package-d", + "test-package-e": "./test/fixtures/test-package-e" }, "devDependencies": { "base62": "~0.4.0", "test-package-a": "./test/fixtures/test-package-a", "test-package-c": "./test/fixtures/test-package-c" + }, + "overrides": { + "test-package-d": { + "main": "main.js" + }, + "test-package-e": { + "main": { + "production": "main.min.js", + "development": "main.js" + } + } } } diff --git a/bower_components/test-package-d/.bower.json b/bower_components/test-package-d/.bower.json new file mode 100644 index 0000000..36f742b --- /dev/null +++ b/bower_components/test-package-d/.bower.json @@ -0,0 +1,9 @@ +{ + "name": "test-package-d", + "main": [ + "./unknownfile.js" + ], + "_source": "/Users/lincoln/Work/Checkouts/debowerify/test/fixtures/test-package-d", + "_target": "*", + "_originalSource": "./test/fixtures/test-package-d" +} \ No newline at end of file diff --git a/bower_components/test-package-d/bower.json b/bower_components/test-package-d/bower.json new file mode 100644 index 0000000..d9b4b79 --- /dev/null +++ b/bower_components/test-package-d/bower.json @@ -0,0 +1,6 @@ +{ + "name": "test-package-d", + "main": [ + "./unknownfile.js" + ] +} diff --git a/bower_components/test-package-d/main.js b/bower_components/test-package-d/main.js new file mode 100644 index 0000000..ce12406 --- /dev/null +++ b/bower_components/test-package-d/main.js @@ -0,0 +1 @@ +loaded = true; diff --git a/bower_components/test-package-e/.bower.json b/bower_components/test-package-e/.bower.json new file mode 100644 index 0000000..5a51e6c --- /dev/null +++ b/bower_components/test-package-e/.bower.json @@ -0,0 +1,10 @@ +{ + "name": "test-package-e", + "main": [ + "./main.js", + "./main.min.js" + ], + "_source": "/Users/lincoln/Work/Checkouts/debowerify/test/fixtures/test-package-e", + "_target": "*", + "_originalSource": "./test/fixtures/test-package-e" +} \ No newline at end of file diff --git a/bower_components/test-package-e/bower.json b/bower_components/test-package-e/bower.json new file mode 100644 index 0000000..61ecc00 --- /dev/null +++ b/bower_components/test-package-e/bower.json @@ -0,0 +1,7 @@ +{ + "name": "test-package-e", + "main": [ + "./main.js", + "./main.min.js" + ] +} diff --git a/bower_components/test-package-e/main.js b/bower_components/test-package-e/main.js new file mode 100644 index 0000000..ecb847d --- /dev/null +++ b/bower_components/test-package-e/main.js @@ -0,0 +1 @@ +notMinified = true; diff --git a/bower_components/test-package-e/main.min.js b/bower_components/test-package-e/main.min.js new file mode 100644 index 0000000..74d8030 --- /dev/null +++ b/bower_components/test-package-e/main.min.js @@ -0,0 +1 @@ +minified = true; diff --git a/index.js b/index.js index 4bbd5ce..94663c4 100644 --- a/index.js +++ b/index.js @@ -112,8 +112,10 @@ module.exports = function (file, options) { var requiredFilePaths = moduleSubPath; if (!requiredFilePaths){ - if (pkgMeta && pkgMeta.main) { - requiredFilePaths = Array.isArray(pkgMeta.main) ? pkgMeta.main.filter(function (file) { return /\.js$/.test(file); }) : [ pkgMeta.main ]; + var pkg = (bowerModules.pkgMeta.overrides[moduleName] || {}).main || pkgMeta.main; + if (pkgMeta && pkg) { + pkg = pkg[process.env.NODE_ENV] || pkg; + requiredFilePaths = Array.isArray(pkg) ? pkg.filter(function (file) { return /\.js$/.test(file); }) : [ pkg ]; } else { // if 'main' wasn't specified by this component, let's try // guessing that the main file is moduleName.js diff --git a/public/overrides.js b/public/overrides.js new file mode 100644 index 0000000..3439552 --- /dev/null +++ b/public/overrides.js @@ -0,0 +1 @@ +require('test-package-d') diff --git a/public/overrides2.js b/public/overrides2.js new file mode 100644 index 0000000..50993b8 --- /dev/null +++ b/public/overrides2.js @@ -0,0 +1 @@ +require('test-package-e') diff --git a/test/fixtures/test-package-d/bower.json b/test/fixtures/test-package-d/bower.json new file mode 100644 index 0000000..d9b4b79 --- /dev/null +++ b/test/fixtures/test-package-d/bower.json @@ -0,0 +1,6 @@ +{ + "name": "test-package-d", + "main": [ + "./unknownfile.js" + ] +} diff --git a/test/fixtures/test-package-d/main.js b/test/fixtures/test-package-d/main.js new file mode 100644 index 0000000..ce12406 --- /dev/null +++ b/test/fixtures/test-package-d/main.js @@ -0,0 +1 @@ +loaded = true; diff --git a/test/fixtures/test-package-e/bower.json b/test/fixtures/test-package-e/bower.json new file mode 100644 index 0000000..61ecc00 --- /dev/null +++ b/test/fixtures/test-package-e/bower.json @@ -0,0 +1,7 @@ +{ + "name": "test-package-e", + "main": [ + "./main.js", + "./main.min.js" + ] +} diff --git a/test/fixtures/test-package-e/main.js b/test/fixtures/test-package-e/main.js new file mode 100644 index 0000000..ecb847d --- /dev/null +++ b/test/fixtures/test-package-e/main.js @@ -0,0 +1 @@ +notMinified = true; diff --git a/test/fixtures/test-package-e/main.min.js b/test/fixtures/test-package-e/main.min.js new file mode 100644 index 0000000..74d8030 --- /dev/null +++ b/test/fixtures/test-package-e/main.min.js @@ -0,0 +1 @@ +minified = true; diff --git a/test/index.js b/test/index.js index 74995c9..434c570 100644 --- a/test/index.js +++ b/test/index.js @@ -72,7 +72,7 @@ describe('debowerify', function() { }); }); - it.only('should be able to debowerify a module with multiple main entries', function(done) { + it('should be able to debowerify a module with multiple main entries', function(done) { var b = browserify(); b.add(path.join(__dirname, '..', 'public', 'multiple_main_entries.js')); b.transform(debowerify); @@ -85,4 +85,31 @@ describe('debowerify', function() { }); }); + it('should be able to debowerify a module with a broken `main` section with overrides', function(done) { + var b = browserify(); + b.add(path.join(__dirname, '..', 'public', 'overrides.js')); + b.transform(debowerify); + b.bundle(function (err, src) { + if (err) return done(err); + var sandbox = { loaded: false }; + vm.runInNewContext(src, sandbox); + expect(sandbox.loaded).to.equal(true); + done(); + }); + }); + + it('should be able to use NODE_ENV to choose which file to debowerify', function(done) { + process.env.NODE_ENV = 'production' + var b = browserify(); + b.add(path.join(__dirname, '..', 'public', 'overrides2.js')); + b.transform(debowerify); + b.bundle(function (err, src) { + if (err) return done(err); + var sandbox = { minified: null, notMinified: null }; + vm.runInNewContext(src, sandbox); + expect(sandbox.minified).to.equal(true); + expect(sandbox.notMinified).to.equal(null); + done(); + }); + }); }); From c3c5c458c24acbc189f10e1d38536f41c523d760 Mon Sep 17 00:00:00 2001 From: Logan Attwood Date: Tue, 3 Nov 2015 12:33:50 -0400 Subject: [PATCH 2/3] Fix for no overrides when using gulp with babel --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 94663c4..769274b 100644 --- a/index.js +++ b/index.js @@ -112,7 +112,7 @@ module.exports = function (file, options) { var requiredFilePaths = moduleSubPath; if (!requiredFilePaths){ - var pkg = (bowerModules.pkgMeta.overrides[moduleName] || {}).main || pkgMeta.main; + var pkg = ((bowerModules.pkgMeta.overrides || {}).moduleName || {}).main || pkgMeta.main; if (pkgMeta && pkg) { pkg = pkg[process.env.NODE_ENV] || pkg; requiredFilePaths = Array.isArray(pkg) ? pkg.filter(function (file) { return /\.js$/.test(file); }) : [ pkg ]; From bacfe6d333aad2c0aba14031db01f72a66cd0c19 Mon Sep 17 00:00:00 2001 From: Logan Attwood Date: Wed, 4 Nov 2015 14:20:14 -0400 Subject: [PATCH 3/3] Wrong lookup type --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 769274b..0a46071 100644 --- a/index.js +++ b/index.js @@ -112,7 +112,7 @@ module.exports = function (file, options) { var requiredFilePaths = moduleSubPath; if (!requiredFilePaths){ - var pkg = ((bowerModules.pkgMeta.overrides || {}).moduleName || {}).main || pkgMeta.main; + var pkg = ((bowerModules.pkgMeta.overrides || {})[moduleName] || {}).main || pkgMeta.main; if (pkgMeta && pkg) { pkg = pkg[process.env.NODE_ENV] || pkg; requiredFilePaths = Array.isArray(pkg) ? pkg.filter(function (file) { return /\.js$/.test(file); }) : [ pkg ];