diff --git a/index.js b/index.js index d3045bf..6ebb5f3 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,6 @@ var utils = require('./utils'); +var fs = require('fs'); +var path = require('path'); var scopedModuleRegex = new RegExp( '@[a-zA-Z0-9][\\w-.]+/[a-zA-Z0-9][\\w-.]+([a-zA-Z0-9./]+)?', @@ -68,11 +70,25 @@ module.exports = function nodeExternals(options) { request = arg1.request; callback = arg2; } + + var res = request; + try { + res = utils.resolveRequest(request, `${context}/`) + } catch (err) { + res = request + } + var moduleName = getModuleName(request, includeAbsolutePaths); + + // use res incase modules main does not resolve to js. + // e.g. reset-css resolves to reset-css/reset.css + // makes /\.css$/ work in this case + // then use request to make 'a-module' work if ( utils.contains(nodeModules, moduleName) && + !utils.containsPattern(allowlist, res) && !utils.containsPattern(allowlist, request) - ) { + ) { // externalize module if (typeof importType === 'function') { return callback(null, importType(request)); } @@ -80,6 +96,6 @@ module.exports = function nodeExternals(options) { // https://webpack.js.org/configuration/externals/ return callback(null, importType + ' ' + request); } - callback(); + callback();; // bundle module }; }; diff --git a/package-lock.json b/package-lock.json index e0c236e..bb1a06e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -878,6 +878,11 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, "pbkdf2-compat": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", @@ -1032,6 +1037,14 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "requires": { + "path-parse": "^1.0.6" + } + }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", diff --git a/package.json b/package.json index 2873c7f..b121b22 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,9 @@ "type": "git", "url": "https://github.com/liady/webpack-node-externals.git" }, - "dependencies": {}, + "dependencies": { + "resolve": "1.17.0" + }, "devDependencies": { "chai": "^3.5.0", "mocha": "^2.5.3", diff --git a/utils.js b/utils.js index b41723e..26fcbe6 100644 --- a/utils.js +++ b/utils.js @@ -1,5 +1,6 @@ var fs = require('fs'); var path = require('path'); +var resolve = require('resolve'); exports.contains = function contains(arr, val) { return arr && arr.indexOf(val) !== -1; @@ -143,3 +144,11 @@ exports.error = function (errors) { .join('\r\n') ); }; + +exports.resolveRequest= function (req, issuer) { + var basedir = + issuer.endsWith(path.posix.sep) || issuer.endsWith(path.win32.sep) + ? issuer + : path.dirname(issuer); + return resolve.sync(req, { basedir: basedir }); +};