55var ModuleAliasPlugin = require ( "enhanced-resolve/lib/ModuleAliasPlugin" ) ;
66var ModuleParserHelpers = require ( "../ModuleParserHelpers" ) ;
77var nodeLibsBrowser = require ( "node-libs-browser" ) ;
8+ var path = require ( "path" ) ;
89
910function NodeSourcePlugin ( options ) {
1011 this . options = options ;
1112}
1213module . exports = NodeSourcePlugin ;
1314NodeSourcePlugin . prototype . apply = function ( compiler ) {
15+ var parser = compiler . parser ;
16+
17+ function buildExpression ( context , pathToModule ) {
18+ var moduleJsPath = path . relative ( context , pathToModule ) ;
19+ if ( ! / ^ [ A - Z ] : / i. test ( moduleJsPath ) ) {
20+ moduleJsPath = "./" + moduleJsPath . replace ( / \\ / g, "/" ) ;
21+ }
22+ return "require(" + JSON . stringify ( moduleJsPath ) + ")" ;
23+ }
24+
25+ function addExpression ( parser , name , module , type , suffix ) {
26+ suffix = suffix || "" ;
27+ parser . plugin ( "expression " + name , function ( ) {
28+ if ( this . state . module && this . state . module . resource === getPathToModule ( module , type ) ) return ;
29+ return ModuleParserHelpers . addParsedVariable ( this , name , buildExpression ( this . state . module . context , getPathToModule ( module , type ) ) + suffix ) ;
30+ } ) ;
31+ }
32+
1433 function getPathToModule ( module , type ) {
1534 if ( type === true || ( type === undefined && nodeLibsBrowser [ module ] ) ) {
1635 if ( ! nodeLibsBrowser [ module ] ) throw new Error ( "No browser version for node.js core module '" + module + "' available" ) ;
@@ -21,23 +40,20 @@ NodeSourcePlugin.prototype.apply = function(compiler) {
2140 return require . resolve ( "node-libs-browser/mock/empty" ) ;
2241 } else return module ;
2342 }
24- if ( this . options . process ) {
25- var processType = this . options . process ;
26- compiler . parser . plugin ( "expression process" , function ( ) {
27- return ModuleParserHelpers . addParsedVariable ( this , "process" , "require(" + JSON . stringify ( getPathToModule ( "process" , processType ) ) + ")" ) ;
28- } ) ;
29- }
43+
3044 if ( this . options . global ) {
3145 compiler . parser . plugin ( "expression global" , function ( ) {
3246 this . state . module . addVariable ( "global" , "(function() { return this; }())" ) ;
3347 return true ;
3448 } ) ;
3549 }
50+ if ( this . options . process ) {
51+ var processType = this . options . process ;
52+ addExpression ( parser , "process" , "process" , processType ) ;
53+ }
3654 if ( this . options . console ) {
3755 var consoleType = this . options . console ;
38- compiler . parser . plugin ( "expression console" , function ( ) {
39- return ModuleParserHelpers . addParsedVariable ( this , "console" , "require(" + JSON . stringify ( getPathToModule ( "console" , consoleType ) ) + ")" ) ;
40- } ) ;
56+ addExpression ( parser , "console" , "console" , consoleType ) ;
4157 }
4258 var bufferType = this . options . Buffer ;
4359 if ( typeof bufferType === "undefined" ) {
@@ -46,18 +62,12 @@ NodeSourcePlugin.prototype.apply = function(compiler) {
4662 bufferType = true ;
4763 }
4864 if ( bufferType ) {
49- compiler . parser . plugin ( "expression Buffer" , function ( ) {
50- return ModuleParserHelpers . addParsedVariable ( this , "Buffer" , "require(" + JSON . stringify ( getPathToModule ( "buffer" , bufferType ) ) + ").Buffer" ) ;
51- } ) ;
65+ addExpression ( parser , "Buffer" , "buffer" , bufferType , ".Buffer" ) ;
5266 }
5367 if ( this . options . setImmediate ) {
5468 var setImmediateType = this . options . setImmediate ;
55- compiler . parser . plugin ( "expression setImmediate" , function ( ) {
56- return ModuleParserHelpers . addParsedVariable ( this , "setImmediate" , "require(" + JSON . stringify ( getPathToModule ( "timers" , setImmediateType ) ) + ").setImmediate" ) ;
57- } ) ;
58- compiler . parser . plugin ( "expression clearImmediate" , function ( ) {
59- return ModuleParserHelpers . addParsedVariable ( this , "clearImmediate" , "require(" + JSON . stringify ( getPathToModule ( "timers" , setImmediateType ) ) + ").clearImmediate" ) ;
60- } ) ;
69+ addExpression ( parser , "setImmediate" , "timers" , setImmediateType , ".setImmediate" ) ;
70+ addExpression ( parser , "clearImmediate" , "timers" , setImmediateType , ".clearImmediate" ) ;
6171 }
6272 var options = this . options ;
6373 compiler . plugin ( "after-resolvers" , function ( compiler ) {
0 commit comments