Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

606 строки
18 KiB

  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const util = require("util");
  7. const memoize = require("./util/memoize");
  8. /** @typedef {import("../declarations/WebpackOptions").Entry} Entry */
  9. /** @typedef {import("../declarations/WebpackOptions").EntryNormalized} EntryNormalized */
  10. /** @typedef {import("../declarations/WebpackOptions").EntryObject} EntryObject */
  11. /** @typedef {import("../declarations/WebpackOptions").ExternalItemFunctionData} ExternalItemFunctionData */
  12. /** @typedef {import("../declarations/WebpackOptions").ExternalItemObjectKnown} ExternalItemObjectKnown */
  13. /** @typedef {import("../declarations/WebpackOptions").ExternalItemObjectUnknown} ExternalItemObjectUnknown */
  14. /** @typedef {import("../declarations/WebpackOptions").ExternalItemValue} ExternalItemValue */
  15. /** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
  16. /** @typedef {import("../declarations/WebpackOptions").FileCacheOptions} FileCacheOptions */
  17. /** @typedef {import("../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
  18. /** @typedef {import("../declarations/WebpackOptions").MemoryCacheOptions} MemoryCacheOptions */
  19. /** @typedef {import("../declarations/WebpackOptions").ModuleOptions} ModuleOptions */
  20. /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
  21. /** @typedef {import("../declarations/WebpackOptions").RuleSetCondition} RuleSetCondition */
  22. /** @typedef {import("../declarations/WebpackOptions").RuleSetConditionAbsolute} RuleSetConditionAbsolute */
  23. /** @typedef {import("../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
  24. /** @typedef {import("../declarations/WebpackOptions").RuleSetUse} RuleSetUse */
  25. /** @typedef {import("../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */
  26. /** @typedef {import("../declarations/WebpackOptions").StatsOptions} StatsOptions */
  27. /** @typedef {import("../declarations/WebpackOptions").WebpackOptions} Configuration */
  28. /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptionsNormalized */
  29. /** @typedef {import("../declarations/WebpackOptions").WebpackPluginFunction} WebpackPluginFunction */
  30. /** @typedef {import("../declarations/WebpackOptions").WebpackPluginInstance} WebpackPluginInstance */
  31. /** @typedef {import("./ChunkGroup")} ChunkGroup */
  32. /** @typedef {import("./Compilation").Asset} Asset */
  33. /** @typedef {import("./Compilation").AssetInfo} AssetInfo */
  34. /** @typedef {import("./Compilation").EntryOptions} EntryOptions */
  35. /** @typedef {import("./Compilation").PathData} PathData */
  36. /** @typedef {import("./Compiler").AssetEmittedInfo} AssetEmittedInfo */
  37. /** @typedef {import("./MultiCompiler").MultiCompilerOptions} MultiCompilerOptions */
  38. /** @typedef {import("./MultiStats")} MultiStats */
  39. /** @typedef {import("./NormalModuleFactory").ResolveData} ResolveData */
  40. /** @typedef {import("./Parser").ParserState} ParserState */
  41. /** @typedef {import("./ResolverFactory").ResolvePluginInstance} ResolvePluginInstance */
  42. /** @typedef {import("./ResolverFactory").Resolver} Resolver */
  43. /** @typedef {import("./Watching")} Watching */
  44. /** @typedef {import("./cli").Argument} Argument */
  45. /** @typedef {import("./cli").Problem} Problem */
  46. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsAsset} StatsAsset */
  47. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunk} StatsChunk */
  48. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunkGroup} StatsChunkGroup */
  49. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunkOrigin} StatsChunkOrigin */
  50. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsCompilation} StatsCompilation */
  51. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsError} StatsError */
  52. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsLogging} StatsLogging */
  53. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsLoggingEntry} StatsLoggingEntry */
  54. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModule} StatsModule */
  55. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleIssuer} StatsModuleIssuer */
  56. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleReason} StatsModuleReason */
  57. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleTraceDependency} StatsModuleTraceDependency */
  58. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleTraceItem} StatsModuleTraceItem */
  59. /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsProfile} StatsProfile */
  60. /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
  61. /** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
  62. /**
  63. * @template {Function} T
  64. * @param {function(): T} factory factory function
  65. * @returns {T} function
  66. */
  67. const lazyFunction = factory => {
  68. const fac = memoize(factory);
  69. const f = /** @type {any} */ ((...args) => fac()(...args));
  70. return /** @type {T} */ (f);
  71. };
  72. /**
  73. * @template A
  74. * @template B
  75. * @param {A} obj input a
  76. * @param {B} exports input b
  77. * @returns {A & B} merged
  78. */
  79. const mergeExports = (obj, exports) => {
  80. const descriptors = Object.getOwnPropertyDescriptors(exports);
  81. for (const name of Object.keys(descriptors)) {
  82. const descriptor = descriptors[name];
  83. if (descriptor.get) {
  84. const fn = descriptor.get;
  85. Object.defineProperty(obj, name, {
  86. configurable: false,
  87. enumerable: true,
  88. get: memoize(fn)
  89. });
  90. } else if (typeof descriptor.value === "object") {
  91. Object.defineProperty(obj, name, {
  92. configurable: false,
  93. enumerable: true,
  94. writable: false,
  95. value: mergeExports({}, descriptor.value)
  96. });
  97. } else {
  98. throw new Error(
  99. "Exposed values must be either a getter or an nested object"
  100. );
  101. }
  102. }
  103. return /** @type {A & B} */ (Object.freeze(obj));
  104. };
  105. const fn = lazyFunction(() => require("./webpack"));
  106. module.exports = mergeExports(fn, {
  107. get webpack() {
  108. return require("./webpack");
  109. },
  110. get validate() {
  111. const webpackOptionsSchemaCheck = require("../schemas/WebpackOptions.check.js");
  112. const getRealValidate = memoize(() => {
  113. const validateSchema = require("./validateSchema");
  114. const webpackOptionsSchema = require("../schemas/WebpackOptions.json");
  115. return options => validateSchema(webpackOptionsSchema, options);
  116. });
  117. return options => {
  118. if (!webpackOptionsSchemaCheck(options)) getRealValidate()(options);
  119. };
  120. },
  121. get validateSchema() {
  122. const validateSchema = require("./validateSchema");
  123. return validateSchema;
  124. },
  125. get version() {
  126. return /** @type {string} */ (require("../package.json").version);
  127. },
  128. get cli() {
  129. return require("./cli");
  130. },
  131. get AutomaticPrefetchPlugin() {
  132. return require("./AutomaticPrefetchPlugin");
  133. },
  134. get AsyncDependenciesBlock() {
  135. return require("./AsyncDependenciesBlock");
  136. },
  137. get BannerPlugin() {
  138. return require("./BannerPlugin");
  139. },
  140. get Cache() {
  141. return require("./Cache");
  142. },
  143. get Chunk() {
  144. return require("./Chunk");
  145. },
  146. get ChunkGraph() {
  147. return require("./ChunkGraph");
  148. },
  149. get CleanPlugin() {
  150. return require("./CleanPlugin");
  151. },
  152. get Compilation() {
  153. return require("./Compilation");
  154. },
  155. get Compiler() {
  156. return require("./Compiler");
  157. },
  158. get ConcatenationScope() {
  159. return require("./ConcatenationScope");
  160. },
  161. get ContextExclusionPlugin() {
  162. return require("./ContextExclusionPlugin");
  163. },
  164. get ContextReplacementPlugin() {
  165. return require("./ContextReplacementPlugin");
  166. },
  167. get DefinePlugin() {
  168. return require("./DefinePlugin");
  169. },
  170. get DelegatedPlugin() {
  171. return require("./DelegatedPlugin");
  172. },
  173. get Dependency() {
  174. return require("./Dependency");
  175. },
  176. get DllPlugin() {
  177. return require("./DllPlugin");
  178. },
  179. get DllReferencePlugin() {
  180. return require("./DllReferencePlugin");
  181. },
  182. get DynamicEntryPlugin() {
  183. return require("./DynamicEntryPlugin");
  184. },
  185. get EntryOptionPlugin() {
  186. return require("./EntryOptionPlugin");
  187. },
  188. get EntryPlugin() {
  189. return require("./EntryPlugin");
  190. },
  191. get EnvironmentPlugin() {
  192. return require("./EnvironmentPlugin");
  193. },
  194. get EvalDevToolModulePlugin() {
  195. return require("./EvalDevToolModulePlugin");
  196. },
  197. get EvalSourceMapDevToolPlugin() {
  198. return require("./EvalSourceMapDevToolPlugin");
  199. },
  200. get ExternalModule() {
  201. return require("./ExternalModule");
  202. },
  203. get ExternalsPlugin() {
  204. return require("./ExternalsPlugin");
  205. },
  206. get Generator() {
  207. return require("./Generator");
  208. },
  209. get HotUpdateChunk() {
  210. return require("./HotUpdateChunk");
  211. },
  212. get HotModuleReplacementPlugin() {
  213. return require("./HotModuleReplacementPlugin");
  214. },
  215. get InitFragment() {
  216. return require("./InitFragment");
  217. },
  218. get IgnorePlugin() {
  219. return require("./IgnorePlugin");
  220. },
  221. get JavascriptModulesPlugin() {
  222. return util.deprecate(
  223. () => require("./javascript/JavascriptModulesPlugin"),
  224. "webpack.JavascriptModulesPlugin has moved to webpack.javascript.JavascriptModulesPlugin",
  225. "DEP_WEBPACK_JAVASCRIPT_MODULES_PLUGIN"
  226. )();
  227. },
  228. get LibManifestPlugin() {
  229. return require("./LibManifestPlugin");
  230. },
  231. get LibraryTemplatePlugin() {
  232. return util.deprecate(
  233. () => require("./LibraryTemplatePlugin"),
  234. "webpack.LibraryTemplatePlugin is deprecated and has been replaced by compilation.outputOptions.library or compilation.addEntry + passing a library option",
  235. "DEP_WEBPACK_LIBRARY_TEMPLATE_PLUGIN"
  236. )();
  237. },
  238. get LoaderOptionsPlugin() {
  239. return require("./LoaderOptionsPlugin");
  240. },
  241. get LoaderTargetPlugin() {
  242. return require("./LoaderTargetPlugin");
  243. },
  244. get Module() {
  245. return require("./Module");
  246. },
  247. get ModuleFilenameHelpers() {
  248. return require("./ModuleFilenameHelpers");
  249. },
  250. get ModuleGraph() {
  251. return require("./ModuleGraph");
  252. },
  253. get ModuleGraphConnection() {
  254. return require("./ModuleGraphConnection");
  255. },
  256. get NoEmitOnErrorsPlugin() {
  257. return require("./NoEmitOnErrorsPlugin");
  258. },
  259. get NormalModule() {
  260. return require("./NormalModule");
  261. },
  262. get NormalModuleReplacementPlugin() {
  263. return require("./NormalModuleReplacementPlugin");
  264. },
  265. get MultiCompiler() {
  266. return require("./MultiCompiler");
  267. },
  268. get OptimizationStages() {
  269. return require("./OptimizationStages");
  270. },
  271. get Parser() {
  272. return require("./Parser");
  273. },
  274. get PlatformPlugin() {
  275. return require("./PlatformPlugin");
  276. },
  277. get PrefetchPlugin() {
  278. return require("./PrefetchPlugin");
  279. },
  280. get ProgressPlugin() {
  281. return require("./ProgressPlugin");
  282. },
  283. get ProvidePlugin() {
  284. return require("./ProvidePlugin");
  285. },
  286. get RuntimeGlobals() {
  287. return require("./RuntimeGlobals");
  288. },
  289. get RuntimeModule() {
  290. return require("./RuntimeModule");
  291. },
  292. get SingleEntryPlugin() {
  293. return util.deprecate(
  294. () => require("./EntryPlugin"),
  295. "SingleEntryPlugin was renamed to EntryPlugin",
  296. "DEP_WEBPACK_SINGLE_ENTRY_PLUGIN"
  297. )();
  298. },
  299. get SourceMapDevToolPlugin() {
  300. return require("./SourceMapDevToolPlugin");
  301. },
  302. get Stats() {
  303. return require("./Stats");
  304. },
  305. get Template() {
  306. return require("./Template");
  307. },
  308. get UsageState() {
  309. return require("./ExportsInfo").UsageState;
  310. },
  311. get WatchIgnorePlugin() {
  312. return require("./WatchIgnorePlugin");
  313. },
  314. get WebpackError() {
  315. return require("./WebpackError");
  316. },
  317. get WebpackOptionsApply() {
  318. return require("./WebpackOptionsApply");
  319. },
  320. get WebpackOptionsDefaulter() {
  321. return util.deprecate(
  322. () => require("./WebpackOptionsDefaulter"),
  323. "webpack.WebpackOptionsDefaulter is deprecated and has been replaced by webpack.config.getNormalizedWebpackOptions and webpack.config.applyWebpackOptionsDefaults",
  324. "DEP_WEBPACK_OPTIONS_DEFAULTER"
  325. )();
  326. },
  327. // TODO webpack 6 deprecate
  328. get WebpackOptionsValidationError() {
  329. return require("schema-utils").ValidationError;
  330. },
  331. get ValidationError() {
  332. return require("schema-utils").ValidationError;
  333. },
  334. cache: {
  335. get MemoryCachePlugin() {
  336. return require("./cache/MemoryCachePlugin");
  337. }
  338. },
  339. config: {
  340. get getNormalizedWebpackOptions() {
  341. return require("./config/normalization").getNormalizedWebpackOptions;
  342. },
  343. get applyWebpackOptionsDefaults() {
  344. return require("./config/defaults").applyWebpackOptionsDefaults;
  345. }
  346. },
  347. dependencies: {
  348. get ModuleDependency() {
  349. return require("./dependencies/ModuleDependency");
  350. },
  351. get HarmonyImportDependency() {
  352. return require("./dependencies/HarmonyImportDependency");
  353. },
  354. get ConstDependency() {
  355. return require("./dependencies/ConstDependency");
  356. },
  357. get NullDependency() {
  358. return require("./dependencies/NullDependency");
  359. }
  360. },
  361. ids: {
  362. get ChunkModuleIdRangePlugin() {
  363. return require("./ids/ChunkModuleIdRangePlugin");
  364. },
  365. get NaturalModuleIdsPlugin() {
  366. return require("./ids/NaturalModuleIdsPlugin");
  367. },
  368. get OccurrenceModuleIdsPlugin() {
  369. return require("./ids/OccurrenceModuleIdsPlugin");
  370. },
  371. get NamedModuleIdsPlugin() {
  372. return require("./ids/NamedModuleIdsPlugin");
  373. },
  374. get DeterministicChunkIdsPlugin() {
  375. return require("./ids/DeterministicChunkIdsPlugin");
  376. },
  377. get DeterministicModuleIdsPlugin() {
  378. return require("./ids/DeterministicModuleIdsPlugin");
  379. },
  380. get NamedChunkIdsPlugin() {
  381. return require("./ids/NamedChunkIdsPlugin");
  382. },
  383. get OccurrenceChunkIdsPlugin() {
  384. return require("./ids/OccurrenceChunkIdsPlugin");
  385. },
  386. get HashedModuleIdsPlugin() {
  387. return require("./ids/HashedModuleIdsPlugin");
  388. }
  389. },
  390. javascript: {
  391. get EnableChunkLoadingPlugin() {
  392. return require("./javascript/EnableChunkLoadingPlugin");
  393. },
  394. get JavascriptModulesPlugin() {
  395. return require("./javascript/JavascriptModulesPlugin");
  396. },
  397. get JavascriptParser() {
  398. return require("./javascript/JavascriptParser");
  399. }
  400. },
  401. optimize: {
  402. get AggressiveMergingPlugin() {
  403. return require("./optimize/AggressiveMergingPlugin");
  404. },
  405. get AggressiveSplittingPlugin() {
  406. return util.deprecate(
  407. () => require("./optimize/AggressiveSplittingPlugin"),
  408. "AggressiveSplittingPlugin is deprecated in favor of SplitChunksPlugin",
  409. "DEP_WEBPACK_AGGRESSIVE_SPLITTING_PLUGIN"
  410. )();
  411. },
  412. get InnerGraph() {
  413. return require("./optimize/InnerGraph");
  414. },
  415. get LimitChunkCountPlugin() {
  416. return require("./optimize/LimitChunkCountPlugin");
  417. },
  418. get MinChunkSizePlugin() {
  419. return require("./optimize/MinChunkSizePlugin");
  420. },
  421. get ModuleConcatenationPlugin() {
  422. return require("./optimize/ModuleConcatenationPlugin");
  423. },
  424. get RealContentHashPlugin() {
  425. return require("./optimize/RealContentHashPlugin");
  426. },
  427. get RuntimeChunkPlugin() {
  428. return require("./optimize/RuntimeChunkPlugin");
  429. },
  430. get SideEffectsFlagPlugin() {
  431. return require("./optimize/SideEffectsFlagPlugin");
  432. },
  433. get SplitChunksPlugin() {
  434. return require("./optimize/SplitChunksPlugin");
  435. }
  436. },
  437. runtime: {
  438. get GetChunkFilenameRuntimeModule() {
  439. return require("./runtime/GetChunkFilenameRuntimeModule");
  440. },
  441. get LoadScriptRuntimeModule() {
  442. return require("./runtime/LoadScriptRuntimeModule");
  443. }
  444. },
  445. prefetch: {
  446. get ChunkPrefetchPreloadPlugin() {
  447. return require("./prefetch/ChunkPrefetchPreloadPlugin");
  448. }
  449. },
  450. web: {
  451. get FetchCompileAsyncWasmPlugin() {
  452. return require("./web/FetchCompileAsyncWasmPlugin");
  453. },
  454. get FetchCompileWasmPlugin() {
  455. return require("./web/FetchCompileWasmPlugin");
  456. },
  457. get JsonpChunkLoadingRuntimeModule() {
  458. return require("./web/JsonpChunkLoadingRuntimeModule");
  459. },
  460. get JsonpTemplatePlugin() {
  461. return require("./web/JsonpTemplatePlugin");
  462. }
  463. },
  464. webworker: {
  465. get WebWorkerTemplatePlugin() {
  466. return require("./webworker/WebWorkerTemplatePlugin");
  467. }
  468. },
  469. node: {
  470. get NodeEnvironmentPlugin() {
  471. return require("./node/NodeEnvironmentPlugin");
  472. },
  473. get NodeSourcePlugin() {
  474. return require("./node/NodeSourcePlugin");
  475. },
  476. get NodeTargetPlugin() {
  477. return require("./node/NodeTargetPlugin");
  478. },
  479. get NodeTemplatePlugin() {
  480. return require("./node/NodeTemplatePlugin");
  481. },
  482. get ReadFileCompileWasmPlugin() {
  483. return require("./node/ReadFileCompileWasmPlugin");
  484. }
  485. },
  486. electron: {
  487. get ElectronTargetPlugin() {
  488. return require("./electron/ElectronTargetPlugin");
  489. }
  490. },
  491. wasm: {
  492. get AsyncWebAssemblyModulesPlugin() {
  493. return require("./wasm-async/AsyncWebAssemblyModulesPlugin");
  494. },
  495. get EnableWasmLoadingPlugin() {
  496. return require("./wasm/EnableWasmLoadingPlugin");
  497. }
  498. },
  499. library: {
  500. get AbstractLibraryPlugin() {
  501. return require("./library/AbstractLibraryPlugin");
  502. },
  503. get EnableLibraryPlugin() {
  504. return require("./library/EnableLibraryPlugin");
  505. }
  506. },
  507. container: {
  508. get ContainerPlugin() {
  509. return require("./container/ContainerPlugin");
  510. },
  511. get ContainerReferencePlugin() {
  512. return require("./container/ContainerReferencePlugin");
  513. },
  514. get ModuleFederationPlugin() {
  515. return require("./container/ModuleFederationPlugin");
  516. },
  517. get scope() {
  518. return require("./container/options").scope;
  519. }
  520. },
  521. sharing: {
  522. get ConsumeSharedPlugin() {
  523. return require("./sharing/ConsumeSharedPlugin");
  524. },
  525. get ProvideSharedPlugin() {
  526. return require("./sharing/ProvideSharedPlugin");
  527. },
  528. get SharePlugin() {
  529. return require("./sharing/SharePlugin");
  530. },
  531. get scope() {
  532. return require("./container/options").scope;
  533. }
  534. },
  535. debug: {
  536. get ProfilingPlugin() {
  537. return require("./debug/ProfilingPlugin");
  538. }
  539. },
  540. util: {
  541. get createHash() {
  542. return require("./util/createHash");
  543. },
  544. get comparators() {
  545. return require("./util/comparators");
  546. },
  547. get runtime() {
  548. return require("./util/runtime");
  549. },
  550. get serialization() {
  551. return require("./util/serialization");
  552. },
  553. get cleverMerge() {
  554. return require("./util/cleverMerge").cachedCleverMerge;
  555. },
  556. get LazySet() {
  557. return require("./util/LazySet");
  558. },
  559. get compileBooleanMatcher() {
  560. return require("./util/compileBooleanMatcher");
  561. }
  562. },
  563. get sources() {
  564. return require("webpack-sources");
  565. },
  566. experiments: {
  567. schemes: {
  568. get HttpUriPlugin() {
  569. return require("./schemes/HttpUriPlugin");
  570. }
  571. },
  572. ids: {
  573. get SyncModuleIdsPlugin() {
  574. return require("./ids/SyncModuleIdsPlugin");
  575. }
  576. }
  577. }
  578. });