mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
| 	MIT License http://www.opensource.org/licenses/mit-license.php
 | |
| 	Author Tobias Koppers @sokra
 | |
| */
 | |
| var Dependency = require("../Dependency");
 | |
| var Module = require("../Module");
 | |
| var RawSource = require("webpack-core/lib/RawSource");
 | |
| 
 | |
| 
 | |
| 
 | |
| function NodeNativeDependency(request, range) {
 | |
| 	Dependency.call(this);
 | |
| 	this.Class = NodeNativeDependency;
 | |
| 	this.userRequest = request;
 | |
| 	this.request = request;
 | |
| 	this.range = range;
 | |
| }
 | |
| 
 | |
| NodeNativeDependency.prototype = Object.create(Dependency.prototype);
 | |
| NodeNativeDependency.prototype.type = "native module";
 | |
| 
 | |
| NodeNativeDependency.prototype.isEqualResource = function isEqualResource(other) {
 | |
| 	if(!(other instanceof NodeNativeDependency))
 | |
| 		return false;
 | |
| 	return this.request == other.request;
 | |
| };
 | |
| 
 | |
| NodeNativeDependency.Template = require("../dependencies/ModuleDependencyTemplateAsRequireId");
 | |
| 
 | |
| 
 | |
| 
 | |
| function NodeNativeCommonJsDependency(request, range) {
 | |
| 	NodeNativeDependency.call(this, request, range);
 | |
| 	this.Class = NodeNativeCommonJsDependency;
 | |
| }
 | |
| 
 | |
| NodeNativeCommonJsDependency.prototype = Object.create(NodeNativeDependency.prototype);
 | |
| NodeNativeCommonJsDependency.Template = require("../dependencies/ModuleDependencyTemplateAsId");
 | |
| 
 | |
| 
 | |
| 
 | |
| function NodeNativeModule(request) {
 | |
| 	Module.call(this);
 | |
| 	this.request = request;
 | |
| 	this.built = false;
 | |
| 	this.cacheable = true;
 | |
| }
 | |
| NodeNativeModule.prototype = Object.create(Module.prototype);
 | |
| 
 | |
| NodeNativeModule.prototype.identifier = NodeNativeModule.prototype.readableIdentifier = function() {
 | |
| 	return this.request;
 | |
| };
 | |
| 
 | |
| NodeNativeModule.prototype.build = function(options, compilation, resolver, fs, callback) {callback()};
 | |
| 
 | |
| NodeNativeModule.prototype.source = function() {
 | |
| 	return new RawSource("module.exports = require.parentRequire(" + JSON.stringify(this.request) + ");");
 | |
| };
 | |
| 
 | |
| NodeNativeModule.prototype.needRebuild = function() {
 | |
| 	return false;
 | |
| };
 | |
| 
 | |
| NodeNativeModule.prototype.size = function() {
 | |
| 	return 42 + this.request.length;
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 | |
| function NodeNativeModuleFactory() {
 | |
| }
 | |
| NodeNativeModuleFactory.prototype.create = function(context, dependency, callback) {
 | |
| 	return callback(null, new NodeNativeModule(dependency.request));
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| function NodeTargetPlugin() {
 | |
| }
 | |
| module.exports = NodeTargetPlugin;
 | |
| NodeTargetPlugin.prototype.apply = function(compiler) {
 | |
| 	compiler.plugin("compilation", function(compilation, params) {
 | |
| 		compilation.dependencyFactories.set(NodeNativeDependency, new NodeNativeModuleFactory());
 | |
| 		compilation.dependencyTemplates.set(NodeNativeDependency, new NodeNativeDependency.Template());
 | |
| 
 | |
| 		compilation.dependencyFactories.set(NodeNativeCommonJsDependency, new NodeNativeModuleFactory());
 | |
| 		compilation.dependencyTemplates.set(NodeNativeCommonJsDependency, new NodeNativeCommonJsDependency.Template());
 | |
| 	});
 | |
| 
 | |
| 	var natives = Object.keys(process.binding("natives"));
 | |
| 	compiler.parser.plugin("call require:commonjs:item", function(expr, param) {
 | |
| 		if(param.isString() && natives.indexOf(param.string) >= 0) {
 | |
| 			var dep = new NodeNativeCommonJsDependency(param.string, param.range);
 | |
| 			this.state.current.addDependency(dep);
 | |
| 			return true;
 | |
| 		}
 | |
| 	});
 | |
| 	compiler.parser.plugin("call define:amd:item", function(expr, param) {
 | |
| 		if(param.isString() && natives.indexOf(param.string) >= 0) {
 | |
| 			var dep = new NodeNativeDependency(param.string, param.range);
 | |
| 			this.state.current.addDependency(dep);
 | |
| 			return true;
 | |
| 		}
 | |
| 	});
 | |
| 	compiler.parser.plugin("call require:amd:item", function(expr, param) {
 | |
| 		if(param.isString() && natives.indexOf(param.string) >= 0) {
 | |
| 			var dep = new NodeNativeDependency(param.string, param.range);
 | |
| 			this.state.current.addDependency(dep);
 | |
| 			return true;
 | |
| 		}
 | |
| 	});
 | |
| }; |