mirror of https://github.com/alibaba/ice.git
fix: merge failure
This commit is contained in:
parent
9f2ee217c2
commit
d66bac736a
|
|
@ -18,6 +18,8 @@ import warnOnHashRouterEnabled from '../utils/warnOnHashRouterEnabled.js';
|
|||
import generateEntry from '../utils/generateEntry.js';
|
||||
import { logger } from '../utils/logger.js';
|
||||
import { getExpandedEnvs } from '../utils/runtimeEnv.js';
|
||||
import getRouterManifest from '../utils/getRouterManifest';
|
||||
import getRoutePaths from '../utils/getRoutePaths';
|
||||
|
||||
const build = async (
|
||||
context: Context<Config, ExtendsPluginAPI>,
|
||||
|
|
@ -135,6 +137,7 @@ const build = async (
|
|||
}
|
||||
const serverOutfile = path.join(outputDir, SERVER_OUTPUT_DIR, `index${userConfig?.server?.format === 'esm' ? '.mjs' : '.cjs'}`);
|
||||
serverEntryRef.current = serverOutfile;
|
||||
const routeType = appConfig?.router?.type;
|
||||
const {
|
||||
outputPaths = [],
|
||||
} = await generateEntry({
|
||||
|
|
@ -150,6 +153,24 @@ const build = async (
|
|||
// This depends on orders.
|
||||
output.paths = [...outputPaths];
|
||||
|
||||
if (routeType === 'memory' && userConfig?.routes?.injectInitialEntry) {
|
||||
// Read the latest routes info.
|
||||
const routes = getRouterManifest(rootDir);
|
||||
const routePaths = getRoutePaths(routes);
|
||||
routePaths.forEach((routePath) => {
|
||||
// Inject `initialPath` when router type is memory.
|
||||
const routeAssetPath = path.join(outputDir, 'js',
|
||||
`p_${routePath === '/' ? 'index' : routePath.replace(/^\//, '').replace(/\//g, '-')}.js`);
|
||||
if (fse.existsSync(routeAssetPath)) {
|
||||
fse.writeFileSync(routeAssetPath,
|
||||
`window.__ICE_APP_CONTEXT__=Object.assign(window.__ICE_APP_CONTEXT__||{}, {routePath: '${routePath}'});${
|
||||
fse.readFileSync(routeAssetPath, 'utf-8')}`);
|
||||
} else {
|
||||
logger.warn(`Can not find ${routeAssetPath} when inject initial path.`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
await applyHook('after.build.compile', {
|
||||
stats,
|
||||
isSuccessful,
|
||||
|
|
|
|||
|
|
@ -1,153 +1,17 @@
|
|||
import * as path from 'path';
|
||||
import fse from 'fs-extra';
|
||||
import chalk from 'chalk';
|
||||
import type { RenderMode } from '@ice/runtime';
|
||||
import lodash from '@ice/bundles/compiled/lodash/index.js';
|
||||
import type { Plugin } from '../../types/plugin.js';
|
||||
import ReCompilePlugin from '../../webpack/ReCompilePlugin.js';
|
||||
import DataLoaderPlugin from '../../webpack/DataLoaderPlugin.js';
|
||||
import { getRouteExportConfig } from '../../service/config.js';
|
||||
import { WEB, SERVER_OUTPUT_DIR, IMPORT_META_TARGET, IMPORT_META_RENDERER } from '../../constant.js';
|
||||
import generateEntry from '../../utils/generateEntry.js';
|
||||
import { WEB } from '../../constant.js';
|
||||
import openBrowser from '../../utils/openBrowser.js';
|
||||
import getServerCompilerPlugin from '../../utils/getServerCompilerPlugin.js';
|
||||
import type ServerCompilerPlugin from '../../webpack/ServerCompilerPlugin.js';
|
||||
import { logger } from '../../utils/logger.js';
|
||||
import getRoutePaths from '../../utils/getRoutePaths.js';
|
||||
import getRouterManifest from '../../utils/getRouterManifest.js';
|
||||
import getWebTask from './task.js';
|
||||
|
||||
const { debounce } = lodash;
|
||||
|
||||
const plugin: Plugin = () => ({
|
||||
name: 'plugin-web',
|
||||
setup: ({ registerTask, onHook, context, generator, serverCompileTask, dataCache, watch, getAllPlugin }) => {
|
||||
setup: ({ registerTask, onHook, context, dataCache }) => {
|
||||
const { rootDir, commandArgs, command, userConfig } = context;
|
||||
const { ssg } = userConfig;
|
||||
|
||||
registerTask(WEB, getWebTask({ rootDir, command, dataCache, userConfig }));
|
||||
|
||||
generator.addExport({
|
||||
specifier: ['Link', 'Outlet', 'useParams', 'useSearchParams', 'useLocation', 'useNavigate'],
|
||||
source: '@ice/runtime/router',
|
||||
});
|
||||
|
||||
generator.addExport({
|
||||
specifier: [
|
||||
'defineAppConfig',
|
||||
'useAppData',
|
||||
'useData',
|
||||
'useConfig',
|
||||
'Meta',
|
||||
'Title',
|
||||
'Links',
|
||||
'Scripts',
|
||||
'Data',
|
||||
'Main',
|
||||
'history',
|
||||
'KeepAliveOutlet',
|
||||
'useMounted',
|
||||
'ClientOnly',
|
||||
'defineDataLoader',
|
||||
'defineServerDataLoader',
|
||||
'defineStaticDataLoader',
|
||||
],
|
||||
source: '@ice/runtime',
|
||||
});
|
||||
|
||||
let serverOutfile: string;
|
||||
let serverCompilerPlugin: ServerCompilerPlugin;
|
||||
onHook(`before.${command as 'start' | 'build'}.run`, async ({ webpackConfigs, taskConfigs, serverCompiler }) => {
|
||||
// Compile server entry after the webpack compilation.
|
||||
const { reCompile: reCompileRouteConfig, ensureRoutesConfig } = getRouteExportConfig(rootDir);
|
||||
const outputDir = webpackConfigs[0].output.path;
|
||||
serverOutfile = path.join(outputDir, SERVER_OUTPUT_DIR, `index${userConfig?.server?.format === 'esm' ? '.mjs' : '.cjs'}`);
|
||||
serverCompilerPlugin = getServerCompilerPlugin(serverCompiler, {
|
||||
rootDir,
|
||||
serverEntry: taskConfigs[0].config?.server?.entry,
|
||||
outputDir: webpackConfigs[0].output.path,
|
||||
dataCache,
|
||||
serverCompileTask: command === 'start' ? serverCompileTask : null,
|
||||
userConfig,
|
||||
ensureRoutesConfig,
|
||||
runtimeDefineVars: {
|
||||
[IMPORT_META_TARGET]: JSON.stringify('web'),
|
||||
[IMPORT_META_RENDERER]: JSON.stringify('server'),
|
||||
},
|
||||
incremental: command === 'start',
|
||||
});
|
||||
webpackConfigs[0].plugins.push(
|
||||
// Add webpack plugin of data-loader in web task
|
||||
new DataLoaderPlugin({ serverCompiler, rootDir, dataCache, getAllPlugin }),
|
||||
// Add ServerCompilerPlugin
|
||||
serverCompilerPlugin,
|
||||
);
|
||||
|
||||
if (command === 'start') {
|
||||
webpackConfigs[0].plugins.push(
|
||||
new ReCompilePlugin(reCompileRouteConfig, (files) => {
|
||||
// Only when routes file changed.
|
||||
const routeManifest = JSON.parse(dataCache.get('routes'))?.routeManifest || {};
|
||||
const routeFiles = Object.keys(routeManifest).map((key) => {
|
||||
const { file } = routeManifest[key];
|
||||
return `src/pages/${file}`;
|
||||
});
|
||||
return files.some((filePath) => routeFiles.some(routeFile => filePath.includes(routeFile)));
|
||||
}),
|
||||
);
|
||||
const debounceCompile = debounce(() => {
|
||||
serverCompilerPlugin?.buildResult?.rebuild();
|
||||
console.log('Document updated, try to reload page for latest html content.');
|
||||
}, 200);
|
||||
watch.addEvent([
|
||||
/src\/document(\/index)?(.js|.jsx|.tsx)/,
|
||||
(event: string) => {
|
||||
if (event === 'change') {
|
||||
debounceCompile();
|
||||
}
|
||||
},
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
onHook('after.build.compile', async ({ webpackConfigs, serverEntryRef, appConfig }) => {
|
||||
const outputDir = webpackConfigs[0].output.path;
|
||||
let renderMode: RenderMode;
|
||||
if (ssg) {
|
||||
renderMode = 'SSG';
|
||||
}
|
||||
serverEntryRef.current = serverOutfile;
|
||||
const routeType = appConfig?.router?.type;
|
||||
await generateEntry({
|
||||
rootDir,
|
||||
outputDir,
|
||||
entry: serverOutfile,
|
||||
// only ssg need to generate the whole page html when build time.
|
||||
documentOnly: !ssg,
|
||||
renderMode,
|
||||
routeType: appConfig?.router?.type,
|
||||
distType: 'html',
|
||||
});
|
||||
|
||||
if (routeType === 'memory' && userConfig?.routes?.injectInitialEntry) {
|
||||
// Read the latest routes info.
|
||||
const routes = getRouterManifest(rootDir);
|
||||
const routePaths = getRoutePaths(routes);
|
||||
routePaths.forEach((routePath) => {
|
||||
// Inject `initialPath` when router type is memory.
|
||||
const routeAssetPath = path.join(outputDir, 'js',
|
||||
`p_${routePath === '/' ? 'index' : routePath.replace(/^\//, '').replace(/\//g, '-')}.js`);
|
||||
if (fse.existsSync(routeAssetPath)) {
|
||||
fse.writeFileSync(routeAssetPath,
|
||||
`window.__ICE_APP_CONTEXT__=Object.assign(window.__ICE_APP_CONTEXT__||{}, {routePath: '${routePath}'});${
|
||||
fse.readFileSync(routeAssetPath, 'utf-8')}`);
|
||||
} else {
|
||||
logger.warn(`Can not find ${routeAssetPath} when inject initial path.`);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
onHook('after.start.compile', async ({ isSuccessful, isFirstCompile, urls, devUrlInfo }) => {
|
||||
const { port, open } = commandArgs;
|
||||
const { devPath } = devUrlInfo;
|
||||
|
|
|
|||
|
|
@ -93,10 +93,8 @@ async function webpackCompiler(options: {
|
|||
}),
|
||||
);
|
||||
const debounceCompile = debounce(() => {
|
||||
serverCompilerPlugin?.buildResult?.rebuild();
|
||||
console.log('Document updated, try to reload page for latest html content.');
|
||||
if (serverCompilerPlugin) {
|
||||
serverCompilerPlugin.compileTask();
|
||||
}
|
||||
}, 200);
|
||||
watch.addEvent([
|
||||
/src\/document(\/index)?(.js|.jsx|.tsx)/,
|
||||
|
|
|
|||
Loading…
Reference in New Issue