fix(core): make plugin lifecycles consistently bound to the plugin instance (#6850)

This commit is contained in:
Joshua Chen 2022-03-05 17:57:10 +08:00 committed by GitHub
parent a756ddb7e1
commit b2d6e453e3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 8 additions and 11 deletions

View file

@ -174,7 +174,10 @@ async function buildLocale({
const {configureWebpack, configurePostCss} = plugin;
if (configurePostCss) {
clientConfig = applyConfigurePostCss(configurePostCss, clientConfig);
clientConfig = applyConfigurePostCss(
configurePostCss.bind(plugin),
clientConfig,
);
}
if (configureWebpack) {

View file

@ -19,12 +19,6 @@ export default async function externalCommand(
// Plugin Lifecycle - extendCli.
plugins.forEach((plugin) => {
const {extendCli} = plugin;
if (!extendCli) {
return;
}
extendCli(cli);
plugin.extendCli?.(cli);
});
}

View file

@ -146,12 +146,12 @@ export default async function start(
const {configureWebpack, configurePostCss} = plugin;
if (configurePostCss) {
config = applyConfigurePostCss(configurePostCss, config);
config = applyConfigurePostCss(configurePostCss.bind(plugin), config);
}
if (configureWebpack) {
config = applyConfigureWebpack(
configureWebpack.bind(plugin), // The plugin lifecycle may reference `this`. // TODO remove this implicit api: inject in callback instead
configureWebpack.bind(plugin), // The plugin lifecycle may reference `this`.
config,
false,
props.siteConfig.webpack?.jsLoader,

View file

@ -51,7 +51,7 @@ export function loadPluginsThemeAliases({
plugins: LoadedPlugin[];
}): Promise<ThemeAliases> {
const pluginThemes: string[] = plugins
.map((plugin) => (plugin.getThemePath ? plugin.getThemePath() : undefined))
.map((plugin) => plugin.getThemePath?.())
.filter((x): x is string => Boolean(x));
const userTheme = path.resolve(siteDir, THEME_PATH);
return loadThemeAliases([ThemeFallbackDir, ...pluginThemes], [userTheme]);