require-node-example
Version:
An example for how to use npm package: require-node & require-node-loader
54 lines (48 loc) • 1.76 kB
JavaScript
var loaderUtils = require("loader-utils");
var _browserify = require('require-node/_browserify');
var aliasPathDict;
function initAliasPathDict(alias) {
aliasPathDict = aliasPathDict || {};
for (var moduleName in alias) {
var modulePath = alias[moduleName];
aliasPathDict[modulePath] = moduleName;
if (modulePath.slice(-3) !== '.js') {
aliasPathDict[modulePath + '.js'] = moduleName;
}
}
}
module.exports = function (content) {
this.cacheable && this.cacheable();
var query = loaderUtils.parseQuery(this.query);
console.log('query:', query)
if (query.alias && !aliasPathDict) {
initAliasPathDict(query.alias);
}
//console.log('__dirname', __dirname);
var index;
if (query.base) {
if (/[\\/]$/.test(query.base)) {
query.base = query.base.slice(0, -1);
}
index = query.base.lastIndexOf('/');
if (index === -1) {
index = query.base.lastIndexOf('\\');
}
} else {
index = __dirname.indexOf('/node_modules/');
if (index === -1) {
index = __dirname.indexOf('\\node_modules\\');
}
}
var urlPath = this.resourcePath.split('?', 1)[0].slice(index).replace(/\\/g, '/');
var moduleName = aliasPathDict && aliasPathDict[urlPath] || urlPath;
console.log('[this.resourcePath,urlPath]', this.resourcePath, urlPath, moduleName);
try {
return _browserify.toCommonJS(this.resourcePath, moduleName, query);
}
catch (err) {
console.log(err && err.stack || err);
console.log('require-node-loader err:', this.resourcePath, moduleName, urlPath);
process.exit(-1);
}
}