update
This commit is contained in:
+3
@@ -59,6 +59,9 @@ For more examples creating different types resolvers (sync/async, context, etc)
|
||||
| mainFields | ["main"] | A list of main fields in description files |
|
||||
| mainFiles | ["index"] | A list of main files in directories |
|
||||
| modules | ["node_modules"] | A list of directories to resolve modules from, can be absolute path or folder name |
|
||||
| roots | [] | A list of directories to resolve request starting with `/` from |
|
||||
| ignoreRootsErrors | false | Ignore fatal errors happening during handling of `roots` (allows to add `roots` without a breaking change) |
|
||||
| preferAbsolute | false | Prefer to resolve server-relative urls as absolute paths before falling back to resolve in roots |
|
||||
| unsafeCache | false | Use this cache object to unsafely cache the successful requests |
|
||||
| plugins | [] | A list of additional resolve plugins which should be applied |
|
||||
| symlinks | true | Whether to resolve symlinks to their symlinked location |
|
||||
|
||||
+26
-1
@@ -28,6 +28,7 @@ const SymlinkPlugin = require("./SymlinkPlugin");
|
||||
const MainFieldPlugin = require("./MainFieldPlugin");
|
||||
const UseFilePlugin = require("./UseFilePlugin");
|
||||
const AppendPlugin = require("./AppendPlugin");
|
||||
const RootPlugin = require("./RootPlugin");
|
||||
const RestrictionsPlugin = require("./RestrictionsPlugin");
|
||||
const ResultPlugin = require("./ResultPlugin");
|
||||
const ModuleAppendPlugin = require("./ModuleAppendPlugin");
|
||||
@@ -78,6 +79,15 @@ exports.createResolver = function(options) {
|
||||
// Resolve to a context instead of a file
|
||||
const resolveToContext = options.resolveToContext || false;
|
||||
|
||||
// A list of root paths
|
||||
const roots = options.roots || [];
|
||||
|
||||
// Ignore errors happening when resolving roots
|
||||
const ignoreRootsErrors = options.ignoreRootsErrors || false;
|
||||
|
||||
// Prefer to resolve server-relative urls as absolute paths before falling back to resolve in roots
|
||||
const preferAbsolute = options.preferAbsolute || false;
|
||||
|
||||
const restrictions = options.restrictions || [];
|
||||
|
||||
// Use this cache object to unsafely cache the successful requests
|
||||
@@ -217,7 +227,22 @@ exports.createResolver = function(options) {
|
||||
plugins.push(new AliasFieldPlugin("described-resolve", item, "resolve"));
|
||||
});
|
||||
plugins.push(new ModuleKindPlugin("after-described-resolve", "raw-module"));
|
||||
plugins.push(new JoinRequestPlugin("after-described-resolve", "relative"));
|
||||
if (preferAbsolute) {
|
||||
plugins.push(new JoinRequestPlugin("after-described-resolve", "relative"));
|
||||
}
|
||||
roots.forEach(root => {
|
||||
plugins.push(
|
||||
new RootPlugin(
|
||||
"after-described-resolve",
|
||||
root,
|
||||
"relative",
|
||||
ignoreRootsErrors
|
||||
)
|
||||
);
|
||||
});
|
||||
if (!preferAbsolute) {
|
||||
plugins.push(new JoinRequestPlugin("after-described-resolve", "relative"));
|
||||
}
|
||||
|
||||
// raw-module
|
||||
moduleExtensions.forEach(item => {
|
||||
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
MIT License http://www.opensource.org/licenses/mit-license.php
|
||||
Author Ivan Kopeykin @vankop
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
/** @typedef {import("./Resolver")} Resolver */
|
||||
/** @typedef {import("./Resolver").ResolveStepHook} ResolveStepHook */
|
||||
|
||||
class RootPlugin {
|
||||
/**
|
||||
* @param {string | ResolveStepHook} source source hook
|
||||
* @param {Array<string>} root roots
|
||||
* @param {string | ResolveStepHook} target target hook
|
||||
* @param {boolean=} ignoreErrors ignore error during resolving of root paths
|
||||
*/
|
||||
constructor(source, root, target, ignoreErrors) {
|
||||
this.root = root;
|
||||
this.source = source;
|
||||
this.target = target;
|
||||
this._ignoreErrors = ignoreErrors;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Resolver} resolver the resolver
|
||||
* @returns {void}
|
||||
*/
|
||||
apply(resolver) {
|
||||
const target = resolver.ensureHook(this.target);
|
||||
|
||||
resolver
|
||||
.getHook(this.source)
|
||||
.tapAsync("RootPlugin", (request, resolveContext, callback) => {
|
||||
const req = request.request;
|
||||
if (!req) return callback();
|
||||
if (!req.startsWith("/")) return callback();
|
||||
|
||||
const path = resolver.join(this.root, req.slice(1));
|
||||
const obj = Object.assign(request, {
|
||||
path,
|
||||
relativePath: request.relativePath && path
|
||||
});
|
||||
resolver.doResolve(
|
||||
target,
|
||||
obj,
|
||||
`root path ${this.root}`,
|
||||
resolveContext,
|
||||
this._ignoreErrors
|
||||
? (err, result) => {
|
||||
if (err) {
|
||||
if (resolveContext.log) {
|
||||
resolveContext.log(
|
||||
`Ignored fatal error while resolving root path:\n${err}`
|
||||
);
|
||||
}
|
||||
return callback();
|
||||
}
|
||||
if (result) return callback(null, result);
|
||||
callback();
|
||||
}
|
||||
: callback
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = RootPlugin;
|
||||
+12
-12
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"enhanced-resolve@4.2.0",
|
||||
"/mnt/Foxconn/Digitalent/Deverloper/liff-push_2series"
|
||||
"enhanced-resolve@4.5.0",
|
||||
"/home/node/nuxt"
|
||||
]
|
||||
],
|
||||
"_from": "enhanced-resolve@4.2.0",
|
||||
"_id": "enhanced-resolve@4.2.0",
|
||||
"_from": "enhanced-resolve@4.5.0",
|
||||
"_id": "enhanced-resolve@4.5.0",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==",
|
||||
"_integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
|
||||
"_location": "/enhanced-resolve",
|
||||
"_phantomChildren": {
|
||||
"core-util-is": "1.0.2",
|
||||
@@ -21,21 +21,21 @@
|
||||
"_requested": {
|
||||
"type": "version",
|
||||
"registry": true,
|
||||
"raw": "enhanced-resolve@4.2.0",
|
||||
"raw": "enhanced-resolve@4.5.0",
|
||||
"name": "enhanced-resolve",
|
||||
"escapedName": "enhanced-resolve",
|
||||
"rawSpec": "4.2.0",
|
||||
"rawSpec": "4.5.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "4.2.0"
|
||||
"fetchSpec": "4.5.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/postcss-import-resolver",
|
||||
"/ts-loader",
|
||||
"/webpack"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz",
|
||||
"_spec": "4.2.0",
|
||||
"_where": "/mnt/Foxconn/Digitalent/Deverloper/liff-push_2series",
|
||||
"_resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
|
||||
"_spec": "4.5.0",
|
||||
"_where": "/home/node/nuxt",
|
||||
"author": {
|
||||
"name": "Tobias Koppers @sokra"
|
||||
},
|
||||
@@ -101,5 +101,5 @@
|
||||
"test": "mocha --full-trace --check-leaks",
|
||||
"travis": "yarn cover --report lcovonly"
|
||||
},
|
||||
"version": "4.2.0"
|
||||
"version": "4.5.0"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user