5
5
var ModuleAliasPlugin = require ( "enhanced-resolve/lib/ModuleAliasPlugin" ) ;
6
6
var ModuleParserHelpers = require ( "../ModuleParserHelpers" ) ;
7
7
var nodeLibsBrowser = require ( "node-libs-browser" ) ;
8
+ var path = require ( "path" ) ;
8
9
9
10
function NodeSourcePlugin ( options ) {
10
11
this . options = options ;
11
12
}
12
13
module . exports = NodeSourcePlugin ;
13
14
NodeSourcePlugin . 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
+
14
33
function getPathToModule ( module , type ) {
15
34
if ( type === true || ( type === undefined && nodeLibsBrowser [ module ] ) ) {
16
35
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) {
21
40
return require . resolve ( "node-libs-browser/mock/empty" ) ;
22
41
} else return module ;
23
42
}
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
+
30
44
if ( this . options . global ) {
31
45
compiler . parser . plugin ( "expression global" , function ( ) {
32
46
this . state . module . addVariable ( "global" , "(function() { return this; }())" ) ;
33
47
return true ;
34
48
} ) ;
35
49
}
50
+ if ( this . options . process ) {
51
+ var processType = this . options . process ;
52
+ addExpression ( parser , "process" , "process" , processType ) ;
53
+ }
36
54
if ( this . options . console ) {
37
55
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 ) ;
41
57
}
42
58
var bufferType = this . options . Buffer ;
43
59
if ( typeof bufferType === "undefined" ) {
@@ -46,18 +62,12 @@ NodeSourcePlugin.prototype.apply = function(compiler) {
46
62
bufferType = true ;
47
63
}
48
64
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" ) ;
52
66
}
53
67
if ( this . options . setImmediate ) {
54
68
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" ) ;
61
71
}
62
72
var options = this . options ;
63
73
compiler . plugin ( "after-resolvers" , function ( compiler ) {
0 commit comments