Skip to content

Commit

Permalink
Merge pull request mozilla#8781 from Rob--W/systemjs-__non_webpack_re…
Browse files Browse the repository at this point in the history
…quire__

__non_webpack_require__ -> require in SystemJS
  • Loading branch information
timvandermeij authored Aug 21, 2017
2 parents 7e4c69e + d253889 commit 81172b5
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
18 changes: 18 additions & 0 deletions systemjs.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,23 @@
typeof crypto !== 'undefined' &&
typeof crypto.subtle !== 'undefined';

// When we create a bundle, webpack is run on the source and it will replace
// require with __webpack_require__. When we want to use the real require,
// __non_webpack_require__ has to be used.
// In this target, we don't create a bundle, so we have to replace the
// occurences of __non_webpack_require__ ourselves.
function babelPluginReplaceNonWebPackRequire(babel) {
return {
visitor: {
Identifier(path, state) {
if (path.node.name === '__non_webpack_require__') {
path.replaceWith(babel.types.identifier('require'));
}
},
},
};
}

SystemJS.config({
packages: {
'': {
Expand All @@ -58,6 +75,7 @@
esModule: true,
babelOptions: {
es2015: false,
plugins: [babelPluginReplaceNonWebPackRequire],
},
},
},
Expand Down
15 changes: 15 additions & 0 deletions test/unit/display_svg_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,21 @@ describe('SVGGraphics', function () {
});
}

it('should fail require("zlib") unless in Node.js', function() {
function testFunc() {
__non_webpack_require__('zlib');
}
// Verifies that the script loader replaces __non_webpack_require__ with
// require.
expect(testFunc.toString()).toMatch(/\srequire\(["']zlib["']\)/);
if (isNodeJS()) {
expect(testFunc).not.toThrow();
} else {
// require not defined, require('zlib') not a module, etc.
expect(testFunc).toThrow();
}
});

it('should produce a reasonably small svg:image', function(done) {
if (!isNodeJS()) {
pending('zlib.deflateSync is not supported in non-Node environments.');
Expand Down

0 comments on commit 81172b5

Please sign in to comment.