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(" + 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;
|
|
}
|
|
});
|
|
}; |