2013-02-14 00:00:07 +08:00
/ *
MIT License http : //www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @ sokra
* /
var path = require ( "path" ) ;
var ModuleAliasPlugin = require ( "enhanced-resolve/lib/ModuleAliasPlugin" ) ;
var ModuleParserHelpers = require ( "./ModuleParserHelpers" ) ;
var ConstDependency = require ( "./dependencies/ConstDependency" ) ;
2013-02-17 05:23:22 +08:00
var BasicEvaluatedExpression = require ( "./BasicEvaluatedExpression" ) ;
2013-10-11 16:42:25 +08:00
var UnsupportedFeatureWarning = require ( "./UnsupportedFeatureWarning" ) ;
2013-02-14 00:00:07 +08:00
2013-12-18 06:21:49 +08:00
function NodeStuffPlugin ( options ) {
2013-02-26 20:31:05 +08:00
this . options = options ;
2013-02-14 00:00:07 +08:00
}
module . exports = NodeStuffPlugin ;
NodeStuffPlugin . prototype . apply = function ( compiler ) {
function ignore ( ) { return true ; }
2013-12-18 06:21:49 +08:00
var context = compiler . context ;
2013-05-14 19:55:06 +08:00
if ( this . options . _ _filename == "mock" ) {
2013-02-26 20:31:05 +08:00
compiler . parser . plugin ( "expression __filename" , function ( expr ) {
this . state . current . addVariable ( "__filename" , JSON . stringify ( "/index.js" ) ) ;
return true ;
} ) ;
} else if ( this . options . _ _filename ) {
compiler . parser . plugin ( "expression __filename" , function ( expr ) {
this . state . current . addVariable ( "__filename" , JSON . stringify (
path . relative ( context , this . state . module . resource )
) ) ;
return true ;
} ) ;
}
2013-02-17 05:23:22 +08:00
compiler . parser . plugin ( "evaluate Identifier __filename" , function ( expr ) {
if ( ! this . state . module ) return ;
var res = new BasicEvaluatedExpression ( ) ;
res . setString ( this . state . module . splitQuery ( this . state . module . resource ) [ 0 ] ) ;
res . setRange ( expr . range ) ;
return res ;
} ) ;
2013-02-26 20:31:05 +08:00
if ( this . options . _ _dirname == "mock" ) {
compiler . parser . plugin ( "expression __dirname" , function ( expr ) {
this . state . current . addVariable ( "__dirname" , JSON . stringify ( "/" ) ) ;
return true ;
} ) ;
} else if ( this . options . _ _dirname ) {
compiler . parser . plugin ( "expression __dirname" , function ( expr ) {
this . state . current . addVariable ( "__dirname" , JSON . stringify (
path . relative ( context , this . state . module . context )
) ) ;
return true ;
} ) ;
}
2013-02-17 05:23:22 +08:00
compiler . parser . plugin ( "evaluate Identifier __dirname" , function ( expr ) {
if ( ! this . state . module ) return ;
var res = new BasicEvaluatedExpression ( ) ;
res . setString ( this . state . module . context ) ;
res . setRange ( expr . range ) ;
return res ;
} ) ;
2013-02-14 00:00:07 +08:00
compiler . parser . plugin ( "expression require.main" , function ( expr ) {
2014-03-03 21:56:17 +08:00
var dep = new ConstDependency ( "__webpack_require__.c[0]" , expr . range ) ;
2013-02-14 00:00:07 +08:00
dep . loc = expr . loc ;
this . state . current . addDependency ( dep ) ;
return true ;
} ) ;
2013-10-11 16:42:25 +08:00
compiler . parser . plugin ( "expression require.extensions" , function ( expr ) {
if ( ! this . state . module ) return ;
this . state . module . warnings . push ( new UnsupportedFeatureWarning ( this . state . module , "require.extensions is not supported by webpack. Use a loader instead." ) ) ;
return true ;
} ) ;
2013-02-14 00:00:07 +08:00
compiler . parser . plugin ( "expression module.exports" , ignore ) ;
compiler . parser . plugin ( "expression module.loaded" , ignore ) ;
compiler . parser . plugin ( "expression module.id" , ignore ) ;
2013-12-18 06:21:49 +08:00
compiler . parser . plugin ( "evaluate Identifier module.hot" , function ( expr ) {
return new BasicEvaluatedExpression ( ) . setBoolean ( false ) . setRange ( expr . range ) ;
} ) ;
2013-02-14 00:00:07 +08:00
compiler . parser . plugin ( "expression module" , function ( expr ) {
return ModuleParserHelpers . addParsedVariable ( this , "module" , "require(" + JSON . stringify ( path . join ( _ _dirname , ".." , "buildin" , "module.js" ) ) + ")(module)" ) ;
} ) ;
} ;