|
1 |
| -// This file serves as a hacky workaround for the lack of "resolveSync" support in webpack. |
2 |
| -// We make our own resolver using a sync file system but using the same plugins & options |
3 |
| -// that webpack does. |
4 | 1 | import interfaces = require('./interfaces');
|
5 | 2 |
|
6 |
| -const Resolver = require("enhanced-resolve/lib/Resolver"); |
7 |
| -const SyncNodeJsInputFileSystem = require("enhanced-resolve/lib/SyncNodeJsInputFileSystem"); |
8 |
| -const CachedInputFileSystem = require("enhanced-resolve/lib/CachedInputFileSystem"); |
9 |
| -const UnsafeCachePlugin = require("enhanced-resolve/lib/UnsafeCachePlugin"); |
10 |
| -const ModulesInDirectoriesPlugin = require("enhanced-resolve/lib/ModulesInDirectoriesPlugin"); |
11 |
| -const ModulesInRootPlugin = require("enhanced-resolve/lib/ModulesInRootPlugin"); |
12 |
| -const ModuleAsFilePlugin = require("enhanced-resolve/lib/ModuleAsFilePlugin"); |
13 |
| -const ModuleAsDirectoryPlugin = require("enhanced-resolve/lib/ModuleAsDirectoryPlugin"); |
14 |
| -const ModuleAliasPlugin = require("enhanced-resolve/lib/ModuleAliasPlugin"); |
15 |
| -const DirectoryDefaultFilePlugin = require("enhanced-resolve/lib/DirectoryDefaultFilePlugin"); |
16 |
| -const DirectoryDescriptionFilePlugin = require("enhanced-resolve/lib/DirectoryDescriptionFilePlugin"); |
17 |
| -const DirectoryDescriptionFileFieldAliasPlugin = require("enhanced-resolve/lib/DirectoryDescriptionFileFieldAliasPlugin"); |
18 |
| -const FileAppendPlugin = require("enhanced-resolve/lib/FileAppendPlugin"); |
19 |
| -const ResultSymlinkPlugin = require("enhanced-resolve/lib/ResultSymlinkPlugin"); |
| 3 | +const node = require("enhanced-resolve/lib/node"); |
20 | 4 |
|
21 |
| -function makeRootPlugin(name: string, root: string | string[]) { |
22 |
| - if (typeof root === "string") { |
23 |
| - return new ModulesInRootPlugin(name, root); |
24 |
| - } else if (Array.isArray(root)) { |
25 |
| - return function() { |
26 |
| - root.forEach(function(root) { |
27 |
| - this.apply(new ModulesInRootPlugin(name, root)); |
28 |
| - }, this); |
29 |
| - }; |
30 |
| - } |
31 |
| - return function() {}; |
32 |
| -} |
33 |
| - |
34 |
| -function makeResolver(options: { resolve: interfaces.Resolve }) { |
35 |
| - let fileSystem = new CachedInputFileSystem(new SyncNodeJsInputFileSystem(), 60000); |
36 |
| - |
37 |
| - let resolver = new Resolver(fileSystem); |
38 |
| - |
39 |
| - // apply the same plugins that webpack does, see webpack/lib/WebpackOptionsApply.js |
40 |
| - resolver.apply( |
41 |
| - new UnsafeCachePlugin(options.resolve.unsafeCache), |
42 |
| - options.resolve.packageAlias ? new DirectoryDescriptionFileFieldAliasPlugin("package.json", options.resolve.packageAlias) : function() {}, |
43 |
| - new ModuleAliasPlugin(options.resolve.alias), |
44 |
| - makeRootPlugin("module", options.resolve.root), |
45 |
| - new ModulesInDirectoriesPlugin("module", options.resolve.modulesDirectories), |
46 |
| - makeRootPlugin("module", options.resolve.fallback), |
47 |
| - new ModuleAsFilePlugin("module"), |
48 |
| - new ModuleAsDirectoryPlugin("module"), |
49 |
| - new DirectoryDescriptionFilePlugin("package.json", options.resolve.packageMains), |
50 |
| - new DirectoryDefaultFilePlugin(["index"]), |
51 |
| - new FileAppendPlugin(options.resolve.extensions), |
52 |
| - new ResultSymlinkPlugin() |
53 |
| - ); |
54 |
| - |
55 |
| - return resolver; |
| 5 | +function makeResolver(options: { resolve: interfaces.Resolve }): interfaces.ResolveSync { |
| 6 | + return node.create.sync(options.resolve); |
56 | 7 | }
|
57 | 8 |
|
58 | 9 | export = makeResolver;
|
0 commit comments