fix(plugin-qiankun): 处理public-path

This commit is contained in:
万纯 2021-03-23 15:55:30 +08:00
parent cf5e8a7454
commit 6dc8291f0b

View File

@ -3,7 +3,6 @@ import address from 'address';
import { lodash } from '@umijs/utils'; import { lodash } from '@umijs/utils';
import { readFileSync } from 'fs'; import { readFileSync } from 'fs';
import { join } from 'path'; import { join } from 'path';
// import { defaultMircoRootId } from '../common';
const namespace = 'plugin-qiankun/micro'; const namespace = 'plugin-qiankun/micro';
@ -20,26 +19,28 @@ export default function (api) {
enableBy: () => isSlaveEnable(api) enableBy: () => isSlaveEnable(api)
}); });
api.modifyDefaultConfig(memo => ({ api.modifyDefaultConfig((memo) => {
const initialMicroOptions = {
devSourceMap: true,
...JSON.parse(process.env.INITIAL_QIANKUN_MIRCO_OPTIONS || '{}'),
...(memo.qiankun || {}).micro
};
const modifiedDefaultConfig = {
...memo, ...memo,
runtimePublicPath: true runtimePublicPath: true,
})); qiankun: {
...memo.qiankun,
api.modifyPublicPathStr((publicPathStr) => { slave: initialMicroOptions
const { runtimePublicPath } = api.config;
const qiankunConfig = api.config.qiankun || {};
if (!qiankunConfig || !qiankunConfig.micro) {
return publicPathStr;
} }
const { shouldNotModifyRuntimePublicPath } = qiankunConfig; };
if (runtimePublicPath === true && !shouldNotModifyRuntimePublicPath) { const shouldNotModifyDefaultBase = api.userConfig.qiankun?.slave?.shouldNotModifyDefaultBase
return `window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__ || "${ ?? initialMicroOptions.shouldNotModifyDefaultBase;
api.config.publicPath || '/' if (!shouldNotModifyDefaultBase) {
}"`; modifiedDefaultConfig.base = `/${api.pkg.name}`;
} }
return publicPathStr; return modifiedDefaultConfig;
}); });
api.chainWebpack((config) => { api.chainWebpack((config) => {
@ -56,11 +57,14 @@ export default function (api) {
: process.env.HOST || 'localhost'; : process.env.HOST || 'localhost';
const protocol = process.env.HTTPS ? 'https' : 'http'; const protocol = process.env.HTTPS ? 'https' : 'http';
// // 变更 webpack-dev-server websocket 默认监听地址 // TODO: 变更 webpack-dev-server websocket 默认监听地址
// process.env.SOCKET_SERVER = `${protocol}://${localHostname}:${port}/`;
api.chainWebpack((memo, { webpack }) => { api.chainWebpack((memo, { webpack }) => {
// 开启了 devSourceMap 配置,默认为 true // 开启了 devSourceMap 配置,默认为 true
if (api.config.qiankun && api.config.qiankun.micro && api.config.qiankun.micro.devSourceMap !== false) { if (
api.config.qiankun
&& api.config.qiankun.micro
&& api.config.qiankun.micro.devSourceMap !== false
) {
// 禁用 devtool启用 SourceMapDevToolPlugin // 禁用 devtool启用 SourceMapDevToolPlugin
memo.devtool(false); memo.devtool(false);
memo.plugin('source-map').use(webpack.SourceMapDevToolPlugin, [ memo.plugin('source-map').use(webpack.SourceMapDevToolPlugin, [
@ -79,22 +83,43 @@ export default function (api) {
const absRuntimePath = join(namespace, 'runtime.js'); const absRuntimePath = join(namespace, 'runtime.js');
const absLifeclesPath = join(namespace, 'lifecycles.js'); const absLifeclesPath = join(namespace, 'lifecycles.js');
const absMicroOptionsPath = join(namespace, 'slaveOptions.js'); const absMicroOptionsPath = join(namespace, 'slaveOptions.js');
const absPublicPath = join(namespace, 'publicPath.js');
// 更改public path
api.addEntryImportsAhead(() => [{ source: `@@/${absPublicPath}` }]);
api.onGenerateFiles(() => { api.onGenerateFiles(() => {
api.writeTmpFile({ api.writeTmpFile({
path: absRuntimePath, path: absRuntimePath,
content: readFileSync(join(__dirname, 'runtime/runtime.tpl'), 'utf-8') content: readFileSync(
join(__dirname, 'runtime/runtime.tpl'),
'utf-8'
)
}); });
api.writeTmpFile({ api.writeTmpFile({
path: absLifeclesPath, path: absLifeclesPath,
content: readFileSync(join(__dirname, 'runtime/lifecycles.tpl'), 'utf-8') content: readFileSync(
join(__dirname, 'runtime/lifecycles.tpl'),
'utf-8'
)
});
api.writeTmpFile({
path: absPublicPath,
content: `
if (window.__POWERED_BY_QIANKUN__) {
__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
`
}); });
api.writeTmpFile({ api.writeTmpFile({
path: absMicroOptionsPath, path: absMicroOptionsPath,
content: ` content: `
let options = ${JSON.stringify((api.config.qiankun || {}).micro || {})}; let options = ${JSON.stringify(
(api.config.qiankun || {}).micro || {}
)};
export const getSlaveOptions = () => options; export const getSlaveOptions = () => options;
export const setSlaveOptions = (newOpts) => options = ({ ...options, ...newOpts }); export const setSlaveOptions = (newOpts) => options = ({ ...options, ...newOpts });
` `