From 7ff994b4dd960bd2e28e5ede634cfbe8a0f0923e Mon Sep 17 00:00:00 2001 From: spikef Date: Fri, 24 Apr 2020 20:50:11 +0800 Subject: [PATCH 1/2] add support for node bundle --- CHANGELOG.md | 3 +++ src/parseUtils.js | 15 +++++++++++++++ test/bundles/validNodeBundleWithModulesAsArray.js | 6 ++++++ ...validNodeBundleWithModulesAsArray.modules.json | 7 +++++++ 4 files changed, 31 insertions(+) create mode 100644 test/bundles/validNodeBundleWithModulesAsArray.js create mode 100644 test/bundles/validNodeBundleWithModulesAsArray.modules.json diff --git a/CHANGELOG.md b/CHANGELOG.md index e6fd3b07..95fc3796 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ _Note: Gaps between patch versions are faulty, broken or test releases._ ## UNRELEASED + * **Improvement** + * Added support for exports.modules when webpack target = node + ## 3.7.0 diff --git a/src/parseUtils.js b/src/parseUtils.js index b4dfeff2..6e4345ce 100644 --- a/src/parseUtils.js +++ b/src/parseUtils.js @@ -25,6 +25,21 @@ function parseBundle(bundlePath) { ast, walkState, { + AssignmentExpression(node, state,) { + if (state.locations) return; + + // Modules are stored in exports.modules: + // exports.modules = {}; + const {left, right} = node; + + if ( + left && + left.object && left.object.name === 'exports' && + left.property && left.property.name === 'modules' + ) { + state.locations = getModulesLocations(right); + } + }, CallExpression(node, state, c) { if (state.locations) return; diff --git a/test/bundles/validNodeBundleWithModulesAsArray.js b/test/bundles/validNodeBundleWithModulesAsArray.js new file mode 100644 index 00000000..4ec4f59a --- /dev/null +++ b/test/bundles/validNodeBundleWithModulesAsArray.js @@ -0,0 +1,6 @@ +exports.ids = ["common"]; +exports.modules = { + 0: function(e,t,n){n(1),n(21),n(96),n(306),n(23),n(150),n(57),n(56),n(34),n(138),e.exports=n(348)}, + 3: function(e,t,n){"use strict";e.exports=n(680)}, + 5: function(e,t){} +}; diff --git a/test/bundles/validNodeBundleWithModulesAsArray.modules.json b/test/bundles/validNodeBundleWithModulesAsArray.modules.json new file mode 100644 index 00000000..0c6be617 --- /dev/null +++ b/test/bundles/validNodeBundleWithModulesAsArray.modules.json @@ -0,0 +1,7 @@ +{ + "modules": { + "0": "function(e,t,n){n(1),n(21),n(96),n(306),n(23),n(150),n(57),n(56),n(34),n(138),e.exports=n(348)}", + "3": "function(e,t,n){\"use strict\";e.exports=n(680)}", + "5": "function(e,t){}" + } +} From 77403b1aff8fac8a575fe04e7fee0b52bfbd1589 Mon Sep 17 00:00:00 2001 From: spikef Date: Wed, 6 May 2020 12:00:43 +0800 Subject: [PATCH 2/2] add isModulesHash(right) check --- src/parseUtils.js | 5 +++-- ...lidNodeBundleWithModulesAsArray.js => validNodeBundle.js} | 0 ...ulesAsArray.modules.json => validNodeBundle.modules.json} | 0 3 files changed, 3 insertions(+), 2 deletions(-) rename test/bundles/{validNodeBundleWithModulesAsArray.js => validNodeBundle.js} (100%) rename test/bundles/{validNodeBundleWithModulesAsArray.modules.json => validNodeBundle.modules.json} (100%) diff --git a/src/parseUtils.js b/src/parseUtils.js index 6e4345ce..0c667a43 100644 --- a/src/parseUtils.js +++ b/src/parseUtils.js @@ -25,7 +25,7 @@ function parseBundle(bundlePath) { ast, walkState, { - AssignmentExpression(node, state,) { + AssignmentExpression(node, state) { if (state.locations) return; // Modules are stored in exports.modules: @@ -35,7 +35,8 @@ function parseBundle(bundlePath) { if ( left && left.object && left.object.name === 'exports' && - left.property && left.property.name === 'modules' + left.property && left.property.name === 'modules' && + isModulesHash(right) ) { state.locations = getModulesLocations(right); } diff --git a/test/bundles/validNodeBundleWithModulesAsArray.js b/test/bundles/validNodeBundle.js similarity index 100% rename from test/bundles/validNodeBundleWithModulesAsArray.js rename to test/bundles/validNodeBundle.js diff --git a/test/bundles/validNodeBundleWithModulesAsArray.modules.json b/test/bundles/validNodeBundle.modules.json similarity index 100% rename from test/bundles/validNodeBundleWithModulesAsArray.modules.json rename to test/bundles/validNodeBundle.modules.json