diff --git a/.yarn-offline-mirror/html-webpack-plugin-4.3.0.tgz b/.yarn-offline-mirror/html-webpack-plugin-4.3.0.tgz
deleted file mode 100644
index 9dfad43..0000000
Binary files a/.yarn-offline-mirror/html-webpack-plugin-4.3.0.tgz and /dev/null differ
diff --git a/.yarn-offline-mirror/html-webpack-plugin-5.0.0-alpha.6.tgz b/.yarn-offline-mirror/html-webpack-plugin-5.0.0-alpha.6.tgz
new file mode 100644
index 0000000..3ed4b0b
Binary files /dev/null and b/.yarn-offline-mirror/html-webpack-plugin-5.0.0-alpha.6.tgz differ
diff --git a/.yarn-offline-mirror/lodash-4.17.20.tgz b/.yarn-offline-mirror/lodash-4.17.20.tgz
new file mode 100644
index 0000000..350db99
Binary files /dev/null and b/.yarn-offline-mirror/lodash-4.17.20.tgz differ
diff --git a/.yarn-offline-mirror/object.getownpropertydescriptors-2.0.3.tgz b/.yarn-offline-mirror/object.getownpropertydescriptors-2.0.3.tgz
deleted file mode 100644
index 1228517..0000000
Binary files a/.yarn-offline-mirror/object.getownpropertydescriptors-2.0.3.tgz and /dev/null differ
diff --git a/.yarn-offline-mirror/util.promisify-1.0.0.tgz b/.yarn-offline-mirror/util.promisify-1.0.0.tgz
deleted file mode 100644
index 43150c4..0000000
Binary files a/.yarn-offline-mirror/util.promisify-1.0.0.tgz and /dev/null differ
diff --git a/examples/vue-cssextract/webpack.config.js b/examples/vue-cssextract/webpack.config.js
index c2f0eec..3454ca6 100644
--- a/examples/vue-cssextract/webpack.config.js
+++ b/examples/vue-cssextract/webpack.config.js
@@ -19,9 +19,7 @@ module.exports = {
use: BabelMultiTargetPlugin.loader(),
}, {
test: /\.vue$/,
- use: [
- BabelMultiTargetPlugin.loader('vue-loader'),
- ],
+ use: BabelMultiTargetPlugin.loader('vue-loader'),
},
{
test: /\.css$/,
@@ -31,18 +29,4 @@ module.exports = {
],
}],
},
-
- node: {
- // prevent webpack from injecting useless setImmediate polyfill because Vue
- // source contains it (although only uses it if it's native).
- setImmediate: false,
- // prevent webpack from injecting mocks to Node native modules
- // that does not make sense for the client
- dgram: 'empty',
- fs: 'empty',
- net: 'empty',
- tls: 'empty',
- // eslint-disable-next-line camelcase
- child_process: 'empty',
- },
}
diff --git a/examples/vue-dynamic-import/webpack.config.js b/examples/vue-dynamic-import/webpack.config.js
index d3b2fcb..a071fb1 100644
--- a/examples/vue-dynamic-import/webpack.config.js
+++ b/examples/vue-dynamic-import/webpack.config.js
@@ -38,18 +38,4 @@ module.exports = {
},
],
},
-
- node: {
- // prevent webpack from injecting useless setImmediate polyfill because Vue
- // source contains it (although only uses it if it's native).
- setImmediate: false,
- // prevent webpack from injecting mocks to Node native modules
- // that does not make sense for the client
- dgram: 'empty',
- fs: 'empty',
- net: 'empty',
- tls: 'empty',
- // eslint-disable-next-line camelcase
- child_process: 'empty',
- },
}
diff --git a/package.json b/package.json
index d2b8b6f..0448e2d 100644
--- a/package.json
+++ b/package.json
@@ -59,7 +59,7 @@
},
"peerDependencies": {
"core-js": "^2.6.3 || ^3.6.5",
- "html-webpack-plugin": "^4.0.0",
+ "html-webpack-plugin": "^5.0.0-alpha.6",
"terser": ">=3.12.0",
"webpack": "^5.0.0",
"webpack-dev-server": "^3.1.0"
@@ -115,7 +115,7 @@
"hard-source-webpack-plugin": "^0.13.1",
"html-loader": "^1.1.0",
"html-webpack-include-assets-plugin": "^2.0.0",
- "html-webpack-plugin": "^4.3.0",
+ "html-webpack-plugin": "^5.0.0-alpha.6",
"jasmine-core": "^3.6.0",
"jasmine-spec-reporter": "^5.0.2",
"mini-css-extract-plugin": "^0.9.0",
diff --git a/src/babel-target.ts b/src/babel-target.ts
index d0c6166..04e4244 100644
--- a/src/babel-target.ts
+++ b/src/babel-target.ts
@@ -1,9 +1,5 @@
import { BabelLoaderTransformOptions, BabelPresetOptions } from 'babel-loader'
-import * as webpack from 'webpack'
-import Chunk = webpack.Chunk
-import ChunkGroup = webpack.ChunkGroup
-import Entrypoint = webpack.Entrypoint
-import Module = webpack.Module
+import { Chunk, ChunkGroup, ChunkGraph, Entrypoint, Module } from 'webpack'
import { BabelLoaderCacheDirectoryOption } from './babel.multi.target.options'
import { BabelTargetOptions } from './babel.target.options'
@@ -33,8 +29,9 @@ export type BabelTargetInfo = { [TOption in keyof BabelTargetOptions]: BabelTarg
// so, need to do this instead
const SIG = {
module: [
- 'disconnect',
- 'unseal',
+ // These are removed in webpack@5
+ // 'disconnect',
+ // 'unseal',
'isEntryModule',
'isInChunk',
],
@@ -51,7 +48,8 @@ const SIG = {
'hasEntryModule',
'addModule',
'removeModule',
- 'setModules',
+ // This is removed in webpack@5
+ // 'setModules',
'getNumberOfModules',
'addGroup',
'isInGroup',
@@ -137,7 +135,7 @@ export class BabelTarget implements BabelTargetInfo {
}
public static getTargetFromModule(module: Module): BabelTarget {
- if (module.options && module.options.babelTarget) {
+ if (module.options?.babelTarget) {
return module.options.babelTarget
}
@@ -146,7 +144,7 @@ export class BabelTarget implements BabelTargetInfo {
}
for (const reason of module.reasons) {
- if (reason.dependency && reason.dependency.babelTarget) {
+ if (reason.dependency?.babelTarget) {
return reason.dependency.babelTarget
}
if (reason.module) {
@@ -162,10 +160,16 @@ export class BabelTarget implements BabelTargetInfo {
}
public static getTargetFromEntrypoint(entrypoint: Entrypoint): BabelTarget {
- if (!entrypoint.runtimeChunk.hasEntryModule()) {
+ if (!entrypoint.getRuntimeChunk().hasEntryModule()) {
return undefined
}
- return BabelTarget.getTargetFromModule(entrypoint.runtimeChunk.entryModule)
+ const arr = Array.from(
+ ChunkGraph.getChunkGraphForChunk(
+ entrypoint.getRuntimeChunk(),
+ 'Chunk.entryModule',
+ 'DEP_WEBPACK_CHUNK_ENTRY_MODULE',
+ ).getChunkEntryModulesIterable(entrypoint.getRuntimeChunk()))
+ return BabelTarget.getTargetFromModule(arr[0])
}
// eslint-disable-next-line
diff --git a/src/babel.multi.target.html.updater.ts b/src/babel.multi.target.html.updater.ts
index cb8082c..7b67401 100644
--- a/src/babel.multi.target.html.updater.ts
+++ b/src/babel.multi.target.html.updater.ts
@@ -90,18 +90,18 @@ export class BabelMultiTargetHtmlUpdater implements Plugin {
// not sure if this is a problem since webpack will wait for dependencies to load, but sorting
// by auto/dependency will result in a cyclic dependency error for lazy-loaded routes
- htmlWebpackPlugin.options.chunksSortMode = 'none' as any
+ htmlWebpackPlugin.userOptions.chunksSortMode = 'none' as any
- if ((htmlWebpackPlugin.options.chunks as any) !== 'all' &&
- htmlWebpackPlugin.options.chunks &&
- htmlWebpackPlugin.options.chunks.length
+ if ((htmlWebpackPlugin.userOptions.chunks as any) !== 'all' &&
+ htmlWebpackPlugin.userOptions.chunks &&
+ htmlWebpackPlugin.userOptions.chunks.length
) {
- htmlWebpackPlugin.options.chunks = this.mapChunkNames(htmlWebpackPlugin.options.chunks as string[])
+ htmlWebpackPlugin.userOptions.chunks = this.mapChunkNames(htmlWebpackPlugin.userOptions.chunks as string[])
}
- if (htmlWebpackPlugin.options.excludeChunks &&
- htmlWebpackPlugin.options.excludeChunks.length) {
- htmlWebpackPlugin.options.excludeChunks = this.mapChunkNames(htmlWebpackPlugin.options.excludeChunks)
+ if (htmlWebpackPlugin.userOptions.excludeChunks &&
+ htmlWebpackPlugin.userOptions.excludeChunks.length) {
+ htmlWebpackPlugin.userOptions.excludeChunks = this.mapChunkNames(htmlWebpackPlugin.userOptions.excludeChunks)
}
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation: Compilation) => {
diff --git a/src/babel.multi.target.plugin.ts b/src/babel.multi.target.plugin.ts
index 0186ac7..231456c 100644
--- a/src/babel.multi.target.plugin.ts
+++ b/src/babel.multi.target.plugin.ts
@@ -73,7 +73,8 @@ export class BabelMultiTargetPlugin implements Plugin {
// magic starts here!
new BabelTargetEntryOptionPlugin(this.targets).apply(compiler)
new TargetingPlugin(this.targets, this.options.exclude, this.options.doNotTarget, compiler.options.externals).apply(compiler)
- new NormalizeCssChunksPlugin(this.targets).apply(compiler)
+ // TODO
+ // new NormalizeCssChunksPlugin(this.targets).apply(compiler)
new BabelMultiTargetHtmlUpdater(this.targets).apply(compiler)
if (this.options.safari10NoModuleFix) {
new SafariNoModuleFixPlugin(this.options.safari10NoModuleFix).apply(compiler)
diff --git a/src/babel.target.entry.dependency.ts b/src/babel.target.entry.dependency.ts
index c3e6745..986c459 100644
--- a/src/babel.target.entry.dependency.ts
+++ b/src/babel.target.entry.dependency.ts
@@ -1,14 +1,40 @@
import { BabelTarget } from './babel-target'
+import { DEV_SERVER_CLIENT } from './constants'
-import Dependency = require('webpack/lib/Dependency')
+import ModuleDependency = require('webpack/lib/dependencies/ModuleDependency')
-export interface EntryLoc {
+interface EntryLoc {
name: string
index?: number
}
-export interface BabelTargetEntryDependency extends Dependency {
- babelTarget: BabelTarget
- loc: EntryLoc
- name: string
+// TODO what's makeSerializable?
+export class BabelTargetEntryDependency extends ModuleDependency {
+
+ public name: string
+ public loc: EntryLoc
+
+ public get type(): string {
+ return 'babel target entry'
+ }
+
+ public getResourceIdentifier(): string {
+ return `module${this.request}!${this.babelTarget.key}`
+ }
+
+ public get category(): string {
+ return 'esm'
+ }
+
+ constructor(public babelTarget: BabelTarget, request: string, public originalName: string, loc?: EntryLoc) {
+ super(`${request.startsWith(DEV_SERVER_CLIENT) ? request : babelTarget.getTargetedRequest(request)}`)
+
+ this.name = babelTarget.getTargetedAssetName(originalName)
+ if (!loc) {
+ loc = { name: `${this.request}:${babelTarget.key}` }
+ } else {
+ loc.name += `:${babelTarget.key}`
+ }
+ this.loc = loc
+ }
}
diff --git a/src/babel.target.entry.option.plugin.ts b/src/babel.target.entry.option.plugin.ts
index 68281fe..abf8ff4 100644
--- a/src/babel.target.entry.option.plugin.ts
+++ b/src/babel.target.entry.option.plugin.ts
@@ -1,8 +1,7 @@
import { Compiler, Plugin } from 'webpack'
import { BabelTarget } from './babel-target'
-import { BabelTargetMultiEntryPlugin } from './babel.target.multi.entry.plugin'
-import { BabelTargetSingleEntryPlugin } from './babel.target.single.entry.plugin'
+import { BabelTargetEntryPlugin } from './babel.target.entry.plugin'
// takes over processing of webpack's entry options so that it generates one entry per entry and target
// basically the same as webpack's built-in EntryOptionPlugin, just using the babel targeting stuff instead
@@ -15,27 +14,56 @@ export class BabelTargetEntryOptionPlugin implements Plugin {
constructor(private targets: BabelTarget[]) {
}
- private itemToPlugin(context: string, item: string | string[], name: string): Plugin {
- if (Array.isArray(item)) {
- return new BabelTargetMultiEntryPlugin(this.targets, context, name, item)
+ // private itemToPlugin(context: string, item: string | string[], name: string): Plugin {
+ // if (Array.isArray(item)) {
+ // return new BabelTargetMultiEntryPlugin(this.targets, context, name, item)
+ // }
+ // if (this.targets.find(target => !!(target.additionalModules && target.additionalModules.length))) {
+ // return new BabelTargetMultiEntryPlugin(this.targets, context, name, [item])
+ // }
+ // return new BabelTargetSingleEntryPlugin(this.targets, context, name, item)
+ // }
+
+ private static entryDescriptionToOptions(compiler: Compiler, name: string, desc: any): any {
+ const options = {
+ name,
+ filename: desc.filename,
+ runtime: desc.runtime,
+ dependOn: desc.dependOn,
+ chunkLoading: desc.chunkLoading,
+ wasmLoading: desc.wasmLoading,
+ library: desc.library,
+ }
+ // TODO what does those plugins do?
+ if (desc.chunkLoading) {
+ // const EnableChunkLoadingPlugin = require("./javascript/EnableChunkLoadingPlugin")
+ // EnableChunkLoadingPlugin.checkEnabled(compiler, desc.chunkLoading)
}
- if (this.targets.find(target => !!(target.additionalModules && target.additionalModules.length))) {
- return new BabelTargetMultiEntryPlugin(this.targets, context, name, [item])
+ if (desc.wasmLoading) {
+ // const EnableWasmLoadingPlugin = require("./wasm/EnableWasmLoadingPlugin")
+ // EnableWasmLoadingPlugin.checkEnabled(compiler, desc.wasmLoading)
}
- return new BabelTargetSingleEntryPlugin(this.targets, context, name, item)
+ if (desc.library) {
+ // const EnableLibraryPlugin = require("./library/EnableLibraryPlugin")
+ // EnableLibraryPlugin.checkEnabled(compiler, desc.library.type)
+ }
+ return options
}
public apply(compiler: Compiler): void {
compiler.hooks.entryOption.tap('EntryOptionPlugin', (context: string, entry: any) => {
- if (typeof entry === 'string' || Array.isArray(entry)) {
- this.itemToPlugin(context, entry, 'main').apply(compiler)
- } else if (typeof entry === 'object') {
- for (const name of Object.keys(entry)) {
- this.itemToPlugin(context, entry[name], name).apply(compiler)
- }
- } else if (typeof entry === 'function') {
+ if (typeof entry === 'function') {
+ // TODO figure out why
throw new Error('not supported')
// new DynamicEntryPlugin(context, entry).apply(compiler)
+ } else{
+ for (const name of Object.keys(entry)) {
+ const desc = entry[name]
+ const options = BabelTargetEntryOptionPlugin.entryDescriptionToOptions(compiler, name, desc)
+ for (const entry of desc.import) {
+ new BabelTargetEntryPlugin(this.targets, context, entry, options).apply(compiler)
+ }
+ }
}
return true
})
diff --git a/src/babel.target.entry.plugin.ts b/src/babel.target.entry.plugin.ts
index 213561c..296a478 100644
--- a/src/babel.target.entry.plugin.ts
+++ b/src/babel.target.entry.plugin.ts
@@ -1,24 +1,32 @@
-import { Compiler, Plugin, Compilation, Dependency, NormalModuleFactory } from 'webpack'
+import { Compiler, EntryPlugin, Compilation, Dependency, NormalModuleFactory } from 'webpack'
import { BabelTarget } from './babel-target'
-import { BabelTargetSingleEntryDependency } from './babel.target.single.entry.dependency'
import { BabelTargetEntryDependency } from './babel.target.entry.dependency'
-export abstract class BabelTargetEntryPlugin implements Plugin {
-
- protected constructor(protected targets: BabelTarget[], protected context: string, protected name: string) {
- }
+export class BabelTargetEntryPlugin implements EntryPlugin {
+ public constructor(protected targets: BabelTarget[], public context: string,
+ public entry: string, public options: EntryPlugin['options']) {}
public apply(compiler: Compiler): void {
compiler.hooks.compilation.tap(
this.constructor.name,
(compilation: Compilation, { normalModuleFactory }: { normalModuleFactory: NormalModuleFactory }) => {
compilation.dependencyFactories.set(
- BabelTargetSingleEntryDependency,
+ BabelTargetEntryDependency,
normalModuleFactory,
)
},
)
+
+ compiler.hooks.make.tapPromise(
+ this.constructor.name,
+ async (compilation: Compilation) => {
+ await Promise.all(this.targets.map(async target => {
+ const dep = new BabelTargetEntryDependency(target, this.entry, (this.options as any).name)
+ return await this.addEntry(compilation, dep)
+ }))
+ },
+ )
}
protected async addEntry(compilation: Compilation, dep: BabelTargetEntryDependency): Promise
diff --git a/src/babel.target.multi.entry.dependency.ts b/src/babel.target.multi.entry.dependency.ts
deleted file mode 100644
index e5bd212..0000000
--- a/src/babel.target.multi.entry.dependency.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { BabelTarget } from './babel-target'
-import { BabelTargetEntryDependency, EntryLoc } from './babel.target.entry.dependency'
-import Dependency = require('webpack/lib/Dependency')
-
-export class BabelTargetMultiEntryDependency extends Dependency implements BabelTargetEntryDependency {
-
- public loc: EntryLoc
- public name: string
-
- public get type(): string {
- return 'babel target multi entry'
- }
-
- constructor(public babelTarget: BabelTarget, public dependencies: Dependency[], public originalName: string) {
- super()
- this.name = babelTarget.getTargetedAssetName(originalName)
- }
-}
diff --git a/src/babel.target.multi.entry.plugin.ts b/src/babel.target.multi.entry.plugin.ts
deleted file mode 100644
index d89b101..0000000
--- a/src/babel.target.multi.entry.plugin.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import { Compilation, Compiler, NormalModuleFactory } from 'webpack'
-import MultiModuleFactory = require('webpack/lib/MultiModuleFactory')
-import SingleEntryDependency = require('webpack/lib/dependencies/SingleEntryDependency')
-
-import { BabelTarget } from './babel-target'
-import { BabelTargetEntryDependency } from './babel.target.entry.dependency'
-import { BabelTargetEntryPlugin } from './babel.target.entry.plugin'
-import { BabelTargetMultiEntryDependency } from './babel.target.multi.entry.dependency'
-import { BabelTargetSingleEntryDependency } from './babel.target.single.entry.dependency'
-
-interface ExistingFactories {
- multiModuleFactory?: MultiModuleFactory
- normalModuleFactory?: NormalModuleFactory
-}
-
-export class BabelTargetMultiEntryPlugin extends BabelTargetEntryPlugin {
-
- constructor(targets: BabelTarget[], context: string, name: string, private entries: string[]) {
- super(targets, context, name)
- }
-
- public apply(compiler: Compiler): void {
- super.apply(compiler)
-
- compiler.hooks.compilation.tap(
- 'BabelTargetMultiEntryPlugin',
- (compilation: Compilation, { multiModuleFactory, normalModuleFactory }: ExistingFactories) => {
- (compilation.dependencyFactories as Map).set(
- BabelTargetMultiEntryDependency,
- multiModuleFactory || new MultiModuleFactory(),
- );
- (compilation.dependencyFactories as Map).set(
- SingleEntryDependency,
- normalModuleFactory,
- )
- },
- )
-
- compiler.hooks.make.tapPromise(
- 'BabelTargetMultiEntryPlugin',
- async (compilation: Compilation) => {
-
- await Promise.all(this.targets.map(async target => {
- const entries = [...(target.additionalModules || []), ...this.entries]
- const dep = BabelTargetMultiEntryPlugin.createDependency(target, entries, this.name)
- return await this.addEntry(compilation, dep)
- }))
- },
- )
- }
-
- static createDependency(target: BabelTarget, entries: string[], name: string): BabelTargetEntryDependency {
- return new BabelTargetMultiEntryDependency(target,
- entries.map((e, idx) => {
- // Because entrypoints are not dependencies found in an
- // existing module, we give it a synthetic id
- return new BabelTargetSingleEntryDependency(target, e, name, { name, index: idx })
- }),
- name,
- )
- }
-
-}
diff --git a/src/babel.target.single.entry.dependency.ts b/src/babel.target.single.entry.dependency.ts
deleted file mode 100644
index 757c988..0000000
--- a/src/babel.target.single.entry.dependency.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import ModuleDependency = require('webpack/lib/dependencies/ModuleDependency')
-
-import { BabelTarget } from './babel-target'
-import { BabelTargetEntryDependency, EntryLoc } from './babel.target.entry.dependency'
-import { DEV_SERVER_CLIENT } from './constants'
-
-export class BabelTargetSingleEntryDependency extends ModuleDependency implements BabelTargetEntryDependency {
-
- public name: string
- public loc: EntryLoc
-
- public get type(): string {
- return 'babel target single entry'
- }
-
- public getResourceIdentifier(): string {
- return `module${this.request}!${this.babelTarget.key}`
- }
-
- constructor(public babelTarget: BabelTarget, request: string, public originalName: string, loc?: EntryLoc) {
- super(`${request.startsWith(DEV_SERVER_CLIENT) ? request : babelTarget.getTargetedRequest(request)}`)
-
- this.name = babelTarget.getTargetedAssetName(originalName)
- if (!loc) {
- loc = { name: `${this.request}:${babelTarget.key}` }
- } else {
- loc.name += `:${babelTarget.key}`
- }
- this.loc = loc
- }
-}
diff --git a/src/babel.target.single.entry.plugin.ts b/src/babel.target.single.entry.plugin.ts
deleted file mode 100644
index db43ff5..0000000
--- a/src/babel.target.single.entry.plugin.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { Compilation, Compiler } from 'webpack'
-
-import { BabelTarget } from './babel-target'
-import { BabelTargetEntryDependency } from './babel.target.entry.dependency'
-import { BabelTargetEntryPlugin } from './babel.target.entry.plugin'
-import { BabelTargetSingleEntryDependency } from './babel.target.single.entry.dependency'
-
-export class BabelTargetSingleEntryPlugin extends BabelTargetEntryPlugin {
-
- constructor(targets: BabelTarget[], context: string, name: string, private entry: string) {
- super(targets, context, name)
- }
-
- public apply(compiler: Compiler): void {
- super.apply(compiler)
-
- compiler.hooks.make.tapPromise(
- 'BabelTargetSingleEntryPlugin',
- async (compilation: Compilation) => {
-
- await Promise.all(this.targets.map(async target => {
- const dep = BabelTargetSingleEntryPlugin.createDependency(target, this.entry, this.name)
- return await this.addEntry(compilation, dep)
- }))
-
- },
- )
- }
-
- static createDependency(target: BabelTarget, entry: string, name: string): BabelTargetEntryDependency {
- return new BabelTargetSingleEntryDependency(target, entry, name)
- }
-
-}
diff --git a/src/named.lazy.chunks.plugin.ts b/src/named.lazy.chunks.plugin.ts
index 29cb640..c74d0ad 100644
--- a/src/named.lazy.chunks.plugin.ts
+++ b/src/named.lazy.chunks.plugin.ts
@@ -15,9 +15,9 @@ export class NamedLazyChunksPlugin implements Plugin {
if (!group.origins) {
return
}
- if ((group as Entrypoint).runtimeChunk === chunk) {
+ if ((group as Entrypoint).getRuntimeChunk() === chunk) {
// TODO did this actually get called?
- result.origins = [ (group as Entrypoint).runtimeChunk.entryModule.reasons[0].dependencies.originalName ]
+ result.origins = [ (group as Entrypoint).getRuntimeChunk().entryModule.reasons[0].dependencies.originalName ]
result.isEntry = true
}
group.origins.forEach((origin) => {
diff --git a/src/normalize.module.ids.plugin.ts b/src/normalize.module.ids.plugin.ts
index c7eb4d1..1f56015 100644
--- a/src/normalize.module.ids.plugin.ts
+++ b/src/normalize.module.ids.plugin.ts
@@ -45,18 +45,19 @@ export class NormalizeModuleIdsPlugin implements Plugin {
if (compilation.name) {
return
}
- const hooks = compilation.mainTemplate.hooks as any
- hooks.beforeStartup.tap(this.pluginName('conditional jsonp callback'), (source: string) => {
- const insertPointCode = 'var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n'
- const insertPoint = source.indexOf(insertPointCode)
- if (insertPoint < 0) {
- return
- }
- const before = source.substring(0, insertPoint)
- const after = source.substring(insertPoint)
- return `${before}if (jsonpArray.push.name === 'webpackJsonpCallback') return;\n${after}`
-
- })
+ // TODO: what's the alternative?
+ // const hooks = compilation.mainTemplate.hooks
+ // hooks.beforeStartup.tap(this.pluginName('conditional jsonp callback'), (source: string) => {
+ // const insertPointCode = 'var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n'
+ // const insertPoint = source.indexOf(insertPointCode)
+ // if (insertPoint < 0) {
+ // return
+ // }
+ // const before = source.substring(0, insertPoint)
+ // const after = source.substring(insertPoint)
+ // return `${before}if (jsonpArray.push.name === 'webpackJsonpCallback') return;\n${after}`
+
+ // })
})
return compiler
})
diff --git a/src/targeting.plugin.ts b/src/targeting.plugin.ts
index 1be1696..9e9c5a1 100644
--- a/src/targeting.plugin.ts
+++ b/src/targeting.plugin.ts
@@ -214,7 +214,7 @@ export class TargetingPlugin implements Plugin {
}
public async afterResolve(resolveContext: any): Promise {
- const loaders: BabelMultiTargetLoader[] = (resolveContext.loaders || [])
+ const loaders: BabelMultiTargetLoader[] = (resolveContext.createData?.loaders || [])
.filter((loaderInfo: any) => loaderInfo.options && loaderInfo.options.isBabelMultiTargetLoader)
this.checkResolveTarget(resolveContext, !!loaders.length)
@@ -242,7 +242,7 @@ export class TargetingPlugin implements Plugin {
// this is probably a dynamic import, in which case the dependencies need to get targeted
resolveContext.dependencies.forEach((dep: Dependency) => this.targetDependency(dep, babelTarget))
} else {
- babelTarget = this.getBlindTarget(resolveContext.resourceResolveData.context.issuer, resolveContext.request)
+ babelTarget = this.getBlindTarget(resolveContext.contextInfo.issuer, resolveContext.request)
}
this.targetChunkNames(resolveContext, babelTarget)
@@ -269,10 +269,10 @@ export class TargetingPlugin implements Plugin {
(resolveContext.resourceResolveData && this.getTargetFromContext(resolveContext)))
loaders.forEach((loader: BabelMultiTargetLoader) => {
- const index = resolveContext.loaders.indexOf(loader)
+ const index = resolveContext.createData.loaders.indexOf(loader)
if (!babelTarget) {
- resolveContext.loaders.splice(index, 1)
+ resolveContext.createData.loaders.splice(index, 1)
return
}
@@ -282,9 +282,9 @@ export class TargetingPlugin implements Plugin {
ident: (loader as any).ident,
}
if (loader.loader === this.babelLoaderPath) {
- resolveContext.loaders.splice(index, 1, this.getTargetedBabelLoader(effectiveLoader, babelTarget))
+ resolveContext.createData.loaders.splice(index, 1, this.getTargetedBabelLoader(effectiveLoader, babelTarget))
} else {
- resolveContext.loaders.splice(index, 1, effectiveLoader)
+ resolveContext.createData.loaders.splice(index, 1, effectiveLoader)
}
})
@@ -361,8 +361,8 @@ export class TargetingPlugin implements Plugin {
return true
}
- const pkgRoot = resolveContext.resourceResolveData.descriptionFileRoot
- const pkg = resolveContext.resourceResolveData.descriptionFileData
+ const pkgRoot = resolveContext.createData.resourceResolveData.descriptionFileRoot
+ const pkg = resolveContext.createData.resourceResolveData.descriptionFileData
// coming from a package's "main" or "browser" field? don't need to transpile
if (pkg.main && resolveContext.resource === path.resolve(pkgRoot, pkg.main)) {
@@ -403,9 +403,7 @@ export class TargetingPlugin implements Plugin {
if (context.contextInfo && context.contextInfo.babelTarget) {
return context.contextInfo.babelTarget
}
- if (context.resourceResolveData &&
- context.resourceResolveData.context &&
- context.resourceResolveData.context.babelTarget
+ if (context.resourceResolveData?.context?.babelTarget
) {
return context.resourceResolveData.context.babelTarget
}
diff --git a/src/types/webpack.d.ts b/src/types/webpack.d.ts
index b64daea..7104926 100644
--- a/src/types/webpack.d.ts
+++ b/src/types/webpack.d.ts
@@ -3,7 +3,7 @@ import { Source } from 'webpack-sources'
declare module 'webpack' {
import { AsyncHook, AsyncParallelHook, AsyncSeriesHook, SyncBailHook, SyncHook } from 'tapable'
- import { Chunk, Compiler, Compilation, Entry, Record, Stats, Output, ExternalsPlugin, WebpackPluginInstance } from 'webpack'
+ import { Chunk, Compiler, Compilation, Entry, Stats, ExternalsPlugin, WebpackPluginInstance } from 'webpack'
import { Source } from 'webpack-sources'
import LoaderContext = webpack.loader.LoaderContext
@@ -19,47 +19,17 @@ declare module 'webpack' {
type NormalModuleFactory = ReturnType['normalModuleFactory'];
type ContextModuleFactory = ReturnType['contextModuleFactory'];
- interface Compiler {
- hooks: CompilerHooks
-
- runAsChild(handler?: Compiler.Handler): void
-
- parentCompilation?: Compilation
- context: string
- }
-
export type AssetPathData = any
- interface SizeOptions {
- chunkOverhead: number
- entryChunkMultiplicator: number
- }
-
- type DeArray = T extends Array ? TEle : never
- type ChunkGroup = DeArray
-
- interface Chunk {
- isInitial(): boolean;
- }
-
- interface Block {}
-
- interface Entrypoint extends ChunkGroup {
- runtimeChunk: Chunk
- }
+ type ChunkGroup = DeArraCompilation['chunkGroups'][number]
+ type Entrypoint = Compilation['asyncEntrypoints'][number]
interface Compilation {
addChunkInGroup(name?: string, module?: Module, loc?: any, request?: string): ChunkGroup
}
import { BabelTarget } from './babel.target'
- interface Compilation {
- assetTargets: { [file: string]: BabelTarget }
- targetAssets: { [key: string]: { target: BabelTarget; map: { [originalFile: string]: string } } }
- babelIgnored: string[]
- }
-
interface Dependency {
module: Module
request: string
@@ -70,39 +40,8 @@ declare module 'webpack' {
originalName?: string
}
- interface DependenciesBlock {
- dependencies: Dependency[]
- blocks: any[]
- variables: any[]
- }
-
interface Module extends DependenciesBlock {
- addDependency(dep: Dependency): void
-
- type: string
- context: string
- debugId: number
- hash: string
- renderedHash: string
- resolveOptions: any
- factoryMeta: any
- warnings: any[]
- errors: any[]
reasons: any[]
- buildMeta: any
- buildInfo: any
- id: string
- index: number
- index2: number
- depth: number
- issuer: Module
- profile: any
- prefetched: boolean
- built: boolean
- used: any
- usedExports: any
- optimizationBailout: any[]
- request?: string
options?: any
}
diff --git a/yarn.lock b/yarn.lock
index 544fc8a..55c842f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1446,7 +1446,7 @@
"@types/source-list-map" "*"
source-map "^0.7.3"
-"@types/webpack@*", "@types/webpack@^4.41.8":
+"@types/webpack@*":
version "4.41.21"
resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.21.tgz#cc685b332c33f153bb2f5fc1fa3ac8adeb592dee"
integrity sha512-2j9WVnNrr/8PLAB5csW44xzQSJwS26aOnICsP3pSGCEdsu6KYtfQ6QJsVUKHWRnm1bL7HziJsfh5fHqth87yKA==
@@ -3183,7 +3183,7 @@ error-ex@^1.2.0, error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0:
+es-abstract@^1.12.0, es-abstract@^1.7.0:
version "1.13.0"
resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
@@ -4182,20 +4182,18 @@ html-webpack-include-assets-plugin@^2.0.0:
minimatch "^3.0.4"
slash "^2.0.0"
-html-webpack-plugin@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz#53bf8f6d696c4637d5b656d3d9863d89ce8174fd"
- integrity sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w==
+html-webpack-plugin@^5.0.0-alpha.6:
+ version "5.0.0-alpha.6"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.0.0-alpha.6.tgz#948f218b27d6f2bfbf0ae4f40816141dcdf55674"
+ integrity sha512-duuDbc+3/GZtTmxP7N4jsTyF83QpjOlM2llL0AjCg22wSreSmbzD6r2ZjnAgLjHvNAmSrMQgPxL9PrE0pTaBmQ==
dependencies:
"@types/html-minifier-terser" "^5.0.0"
"@types/tapable" "^1.0.5"
- "@types/webpack" "^4.41.8"
html-minifier-terser "^5.0.1"
- loader-utils "^1.2.3"
- lodash "^4.17.15"
+ loader-utils "2.0.0"
+ lodash "^4.17.20"
pretty-error "^2.1.1"
- tapable "^1.1.3"
- util.promisify "1.0.0"
+ tapable "2.0.0"
htmlparser2@^3.3.0:
version "3.10.1"
@@ -5071,6 +5069,15 @@ loader-runner@^4.1.0:
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.1.0.tgz#f70bc0c29edbabdf2043e7ee73ccc3fe1c96b42d"
integrity sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==
+loader-utils@2.0.0, loader-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
+ integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^2.1.2"
+
loader-utils@^0.2.17:
version "0.2.17"
resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
@@ -5090,7 +5097,7 @@ loader-utils@^1.0.0, loader-utils@^1.4.0:
emojis-list "^3.0.0"
json5 "^1.0.1"
-loader-utils@^1.1.0, loader-utils@^1.2.3:
+loader-utils@^1.1.0:
version "1.2.3"
resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
@@ -5099,15 +5106,6 @@ loader-utils@^1.1.0, loader-utils@^1.2.3:
emojis-list "^2.0.0"
json5 "^1.0.1"
-loader-utils@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
- integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
- dependencies:
- big.js "^5.2.2"
- emojis-list "^3.0.0"
- json5 "^2.1.2"
-
locate-path@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -5156,6 +5154,11 @@ lodash@^4.17.19:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
+lodash@^4.17.20:
+ version "4.17.20"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
+ integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
+
log-driver@^1.2.7:
version "1.2.7"
resolved "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8"
@@ -5877,14 +5880,6 @@ object.assign@^4.1.0:
has-symbols "^1.0.0"
object-keys "^1.0.11"
-object.getownpropertydescriptors@^2.0.3:
- version "2.0.3"
- resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
- integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
- dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.5.1"
-
object.pick@^1.3.0:
version "1.3.0"
resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
@@ -7787,16 +7782,16 @@ table@^5.2.3:
slice-ansi "^2.1.0"
string-width "^3.0.0"
-tapable@^1.0.0-beta.5, tapable@^1.1.3:
- version "1.1.3"
- resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
- integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
-
-tapable@^2.0.0:
+tapable@2.0.0, tapable@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.0.0.tgz#a49c3d6a8a2bb606e7db372b82904c970d537a08"
integrity sha512-bjzn0C0RWoffnNdTzNi7rNDhs1Zlwk2tRXgk8EiHKAOX1Mag3d6T0Y5zNa7l9CJ+EoUne/0UHdwS8tMbkh9zDg==
+tapable@^1.0.0-beta.5:
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
tar@^2.0.0:
version "2.2.2"
resolved "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
@@ -8211,14 +8206,6 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-util.promisify@1.0.0:
- version "1.0.0"
- resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
- integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
- dependencies:
- define-properties "^1.1.2"
- object.getownpropertydescriptors "^2.0.3"
-
utila@^0.4.0, utila@~0.4:
version "0.4.0"
resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"