@modern-js/app-tools 2.5.1-alpha.0 → 2.5.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/analyze/generateCode.js +19 -13
- package/dist/cjs/analyze/getBundleEntry.js +1 -1
- package/dist/cjs/builder/builder-webpack/builderPlugins/compatModern.js +3 -3
- package/dist/cjs/builder/builder-webpack/index.js +11 -5
- package/dist/cjs/builder/generator/getBuilderTargets.js +1 -1
- package/dist/cjs/commands/dev.js +12 -14
- package/dist/cjs/commands/serve.js +17 -0
- package/dist/cjs/config/legacy/createToolsConfig.js +1 -4
- package/dist/esm/analyze/generateCode.js +37 -26
- package/dist/esm/analyze/getBundleEntry.js +2 -2
- package/dist/esm/builder/builder-webpack/builderPlugins/compatModern.js +2 -2
- package/dist/esm/builder/builder-webpack/index.js +11 -7
- package/dist/esm/builder/generator/getBuilderTargets.js +1 -1
- package/dist/esm/commands/dev.js +9 -8
- package/dist/esm/commands/serve.js +6 -1
- package/dist/esm/config/legacy/createToolsConfig.js +1 -4
- package/dist/esm-node/analyze/generateCode.js +20 -14
- package/dist/esm-node/analyze/getBundleEntry.js +2 -3
- package/dist/esm-node/builder/builder-webpack/builderPlugins/compatModern.js +2 -2
- package/dist/esm-node/builder/builder-webpack/index.js +12 -6
- package/dist/esm-node/builder/generator/getBuilderTargets.js +1 -1
- package/dist/esm-node/commands/dev.js +12 -14
- package/dist/esm-node/commands/serve.js +18 -1
- package/dist/esm-node/config/legacy/createToolsConfig.js +1 -4
- package/dist/js/modern/analyze/constants.js +3 -1
- package/dist/js/modern/analyze/getServerRoutes.js +5 -2
- package/dist/js/modern/analyze/index.js +47 -46
- package/dist/js/modern/analyze/nestedRoutes.js +32 -3
- package/dist/js/modern/analyze/templates.js +4 -10
- package/dist/js/modern/builder/builder-rspack/index.js +8 -0
- package/dist/js/modern/builder/builder-webpack/builderPlugins/compatModern.js +41 -0
- package/dist/js/modern/builder/builder-webpack/index.js +93 -0
- package/dist/js/modern/builder/{webpackPlugins/routerPlugin.js → builder-webpack/webpackPlugins/RouterPlugin.js} +4 -1
- package/dist/js/modern/builder/builder-webpack/webpackPlugins/index.js +1 -0
- package/dist/js/modern/builder/generator/createBuilderOptions.js +24 -0
- package/dist/js/modern/builder/generator/createBuilderProviderConfig.js +39 -0
- package/dist/js/modern/builder/generator/getBuilderTargets.js +21 -0
- package/dist/js/modern/builder/generator/index.js +53 -0
- package/dist/js/modern/builder/index.js +13 -133
- package/dist/js/modern/builder/{builderPlugins/compatModern.js → shared/builderPlugins/adapterModern.js} +102 -116
- package/dist/js/modern/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +27 -0
- package/dist/js/modern/builder/shared/bundlerPlugins/HtmlBottomTemplate.js +34 -0
- package/dist/js/modern/builder/shared/index.js +3 -0
- package/dist/js/modern/builder/shared/types.js +0 -0
- package/dist/js/modern/config/default.js +2 -2
- package/dist/js/modern/config/index.js +3 -8
- package/dist/js/modern/config/initialize/index.js +12 -0
- package/dist/js/modern/config/{initial → initialize}/inits.js +4 -2
- package/dist/js/modern/config/{initial/transformNormalizedConfig.js → legacy/index.js} +4 -0
- package/dist/js/modern/index.js +18 -8
- package/dist/js/modern/initialize/index.js +36 -28
- package/dist/js/modern/locale/zh.js +1 -1
- package/dist/js/modern/types/utils.js +0 -0
- package/dist/js/node/analyze/constants.js +3 -1
- package/dist/js/node/analyze/getServerRoutes.js +3 -1
- package/dist/js/node/analyze/index.js +48 -47
- package/dist/js/node/analyze/nestedRoutes.js +32 -3
- package/dist/js/node/analyze/templates.js +4 -10
- package/dist/js/node/{config/initial → builder/builder-rspack}/index.js +9 -19
- package/dist/js/node/builder/builder-webpack/builderPlugins/compatModern.js +64 -0
- package/dist/js/node/builder/builder-webpack/index.js +118 -0
- package/dist/js/node/builder/{webpackPlugins/routerPlugin.js → builder-webpack/webpackPlugins/RouterPlugin.js} +10 -5
- package/dist/js/node/builder/builder-webpack/webpackPlugins/index.js +17 -0
- package/dist/js/node/builder/generator/createBuilderOptions.js +47 -0
- package/dist/js/node/builder/generator/createBuilderProviderConfig.js +60 -0
- package/dist/js/node/builder/generator/getBuilderTargets.js +39 -0
- package/dist/js/node/builder/generator/index.js +82 -0
- package/dist/js/node/builder/index.js +14 -123
- package/dist/js/node/builder/{builderPlugins/compatModern.js → shared/builderPlugins/adapterModern.js} +107 -120
- package/dist/js/node/builder/{webpackPlugins/htmlAsyncChunkPlugin.js → shared/bundlerPlugins/HtmlAsyncChunkPlugin.js} +17 -20
- package/dist/js/node/builder/{webpackPlugins/htmlBottomTemplate.js → shared/bundlerPlugins/HtmlBottomTemplate.js} +21 -24
- package/dist/js/node/builder/{share.js → shared/createCopyPattern.js} +3 -3
- package/dist/js/node/builder/shared/index.js +19 -0
- package/dist/js/node/builder/shared/types.js +15 -0
- package/dist/js/node/config/default.js +2 -2
- package/dist/js/node/config/index.js +4 -19
- package/dist/js/node/{builder/loaders/routerLoader.js → config/initialize/index.js} +14 -17
- package/dist/js/node/config/{initial → initialize}/inits.js +4 -2
- package/dist/js/node/config/{initial/transformNormalizedConfig.js → legacy/index.js} +8 -3
- package/dist/js/node/index.js +18 -8
- package/dist/js/node/initialize/index.js +35 -28
- package/dist/js/node/locale/zh.js +1 -1
- package/dist/js/node/types/utils.js +15 -0
- package/dist/js/treeshaking/analyze/constants.js +3 -1
- package/dist/js/treeshaking/analyze/generateCode.js +14 -14
- package/dist/js/treeshaking/analyze/getBundleEntry.js +2 -2
- package/dist/js/treeshaking/analyze/getClientRoutes/getRoutes.js +1 -1
- package/dist/js/treeshaking/analyze/getClientRoutes/getRoutesLegacy.js +1 -1
- package/dist/js/treeshaking/analyze/getFileSystemEntry.js +1 -1
- package/dist/js/treeshaking/analyze/getServerRoutes.js +8 -6
- package/dist/js/treeshaking/analyze/index.js +142 -137
- package/dist/js/treeshaking/analyze/nestedRoutes.js +29 -4
- package/dist/js/treeshaking/analyze/templates.js +10 -13
- package/dist/js/treeshaking/analyze/utils.js +3 -3
- package/dist/js/treeshaking/builder/builder-rspack/index.js +6 -0
- package/dist/js/treeshaking/builder/builder-webpack/builderPlugins/compatModern.js +64 -0
- package/dist/js/treeshaking/builder/builder-webpack/index.js +301 -0
- package/dist/js/treeshaking/builder/{webpackPlugins/routerPlugin.js → builder-webpack/webpackPlugins/RouterPlugin.js} +6 -3
- package/dist/js/treeshaking/builder/builder-webpack/webpackPlugins/index.js +1 -0
- package/dist/js/treeshaking/builder/generator/createBuilderOptions.js +41 -0
- package/dist/js/treeshaking/builder/generator/createBuilderProviderConfig.js +70 -0
- package/dist/js/treeshaking/builder/generator/getBuilderTargets.js +16 -0
- package/dist/js/treeshaking/builder/generator/index.js +199 -0
- package/dist/js/treeshaking/builder/index.js +29 -228
- package/dist/js/treeshaking/builder/{builderPlugins/compatModern.js → shared/builderPlugins/adapterModern.js} +138 -142
- package/dist/js/treeshaking/builder/{webpackPlugins/htmlBottomTemplate.js → shared/bundlerPlugins/HtmlBottomTemplate.js} +2 -2
- package/dist/js/treeshaking/builder/shared/index.js +3 -0
- package/dist/js/treeshaking/builder/shared/types.js +1 -0
- package/dist/js/treeshaking/commands/dev.js +2 -2
- package/dist/js/treeshaking/commands/serve.js +2 -2
- package/dist/js/treeshaking/config/default.js +2 -2
- package/dist/js/treeshaking/config/index.js +3 -3
- package/dist/js/treeshaking/config/initialize/index.js +10 -0
- package/dist/js/treeshaking/config/{initial → initialize}/inits.js +6 -4
- package/dist/js/treeshaking/config/legacy/createHtmlConfig.js +19 -0
- package/dist/js/treeshaking/config/{initial → legacy}/createOutputConfig.js +1 -1
- package/dist/js/treeshaking/config/{initial → legacy}/createSourceConfig.js +1 -1
- package/dist/js/treeshaking/config/{initial → legacy}/createToolsConfig.js +1 -1
- package/dist/js/treeshaking/config/{initial/transformNormalizedConfig.js → legacy/index.js} +4 -1
- package/dist/js/treeshaking/index.js +19 -12
- package/dist/js/treeshaking/initialize/index.js +36 -28
- package/dist/js/treeshaking/locale/zh.js +1 -1
- package/dist/js/treeshaking/types/utils.js +1 -0
- package/dist/js/treeshaking/utils/config.js +2 -2
- package/dist/js/treeshaking/utils/getServerInternalPlugins.js +2 -2
- package/dist/types/builder/builder-webpack/builderPlugins/compatModern.d.ts +7 -1
- package/package.json +6 -6
- package/dist/js/modern/builder/loaders/routerLoader.js +0 -17
- package/dist/js/modern/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -30
- package/dist/js/modern/builder/webpackPlugins/htmlBottomTemplate.js +0 -37
- package/dist/js/modern/config/initial/index.js +0 -16
- package/dist/js/treeshaking/builder/loaders/routerLoader.js +0 -13
- package/dist/js/treeshaking/config/initial/createHtmlConfig.js +0 -19
- package/dist/js/treeshaking/config/initial/index.js +0 -12
- /package/dist/js/modern/builder/{share.js → shared/createCopyPattern.js} +0 -0
- /package/dist/js/modern/builder/{loaders → shared/loaders}/serverModuleLoader.js +0 -0
- /package/dist/js/modern/config/{initial → legacy}/createHtmlConfig.js +0 -0
- /package/dist/js/modern/config/{initial → legacy}/createOutputConfig.js +0 -0
- /package/dist/js/modern/config/{initial → legacy}/createSourceConfig.js +0 -0
- /package/dist/js/modern/config/{initial → legacy}/createToolsConfig.js +0 -0
- /package/dist/js/node/builder/{loaders → shared/loaders}/serverModuleLoader.js +0 -0
- /package/dist/js/node/config/{initial → legacy}/createHtmlConfig.js +0 -0
- /package/dist/js/node/config/{initial → legacy}/createOutputConfig.js +0 -0
- /package/dist/js/node/config/{initial → legacy}/createSourceConfig.js +0 -0
- /package/dist/js/node/config/{initial → legacy}/createToolsConfig.js +0 -0
- /package/dist/js/treeshaking/builder/{webpackPlugins/htmlAsyncChunkPlugin.js → shared/bundlerPlugins/HtmlAsyncChunkPlugin.js} +0 -0
- /package/dist/js/treeshaking/builder/{share.js → shared/createCopyPattern.js} +0 -0
- /package/dist/js/treeshaking/builder/{loaders → shared/loaders}/serverModuleLoader.js +0 -0
|
@@ -3,8 +3,7 @@ import {
|
|
|
3
3
|
ensureAbsolutePath,
|
|
4
4
|
fs,
|
|
5
5
|
findExists,
|
|
6
|
-
MAIN_ENTRY_NAME
|
|
7
|
-
isRouterV5
|
|
6
|
+
MAIN_ENTRY_NAME
|
|
8
7
|
} from "@modern-js/utils";
|
|
9
8
|
import { getFileSystemEntry } from "./getFileSystemEntry";
|
|
10
9
|
import { JS_EXTENSIONS } from "./constants";
|
|
@@ -56,7 +55,7 @@ const getBundleEntry = (appContext, config) => {
|
|
|
56
55
|
customBootstrap: value.customBootstrap && ensureAbsolutePath(appDirectory, value.customBootstrap),
|
|
57
56
|
fileSystemRoutes: fs.statSync(ensureAbsolutePath(appDirectory, value.entry)).isDirectory() ? {} : void 0
|
|
58
57
|
};
|
|
59
|
-
if (entrypoint.fileSystemRoutes
|
|
58
|
+
if (entrypoint.fileSystemRoutes) {
|
|
60
59
|
entrypoint.nestedRoutesEntry = entrypoint.entry;
|
|
61
60
|
}
|
|
62
61
|
if (!ifAlreadyExists(defaults, entrypoint)) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { join } from "path";
|
|
2
2
|
import { createCopyPattern } from "../../shared";
|
|
3
3
|
import { RouterPlugin } from "../webpackPlugins";
|
|
4
|
-
const
|
|
4
|
+
const PluginCompatModern = (options) => ({
|
|
5
5
|
name: "builder-plugin-compat-modern",
|
|
6
6
|
setup(api) {
|
|
7
7
|
const { normalizedConfig: modernConfig, appContext } = options;
|
|
@@ -37,5 +37,5 @@ const builderPluginCompatModern = (options) => ({
|
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
39
|
export {
|
|
40
|
-
|
|
40
|
+
PluginCompatModern
|
|
41
41
|
};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
builderWebpackProvider
|
|
3
3
|
} from "@modern-js/builder-webpack-provider";
|
|
4
|
+
import { applyOptionsChain } from "@modern-js/utils";
|
|
4
5
|
import { createCopyPattern } from "../shared";
|
|
5
6
|
import { generateBuilder } from "../generator";
|
|
6
|
-
import {
|
|
7
|
+
import { PluginCompatModern } from "./builderPlugins/compatModern";
|
|
7
8
|
function createWebpackBuilderForModern(options) {
|
|
8
9
|
return generateBuilder(options, builderWebpackProvider, {
|
|
9
10
|
modifyBuilderConfig(config) {
|
|
@@ -30,15 +31,20 @@ function modifyOutputConfig(config, appContext) {
|
|
|
30
31
|
async function applyBuilderPlugins(builder, options) {
|
|
31
32
|
const { normalizedConfig } = options;
|
|
32
33
|
if (!normalizedConfig.output.disableNodePolyfill) {
|
|
33
|
-
const {
|
|
34
|
-
builder.addPlugins([
|
|
34
|
+
const { PluginNodePolyfill } = await import("@modern-js/builder-plugin-node-polyfill");
|
|
35
|
+
builder.addPlugins([PluginNodePolyfill()]);
|
|
35
36
|
}
|
|
36
37
|
if (normalizedConfig.tools.esbuild) {
|
|
37
38
|
const { esbuild: esbuildOptions } = normalizedConfig.tools;
|
|
38
|
-
const {
|
|
39
|
-
builder.addPlugins([
|
|
39
|
+
const { PluginEsbuild } = await import("@modern-js/builder-plugin-esbuild");
|
|
40
|
+
builder.addPlugins([
|
|
41
|
+
PluginEsbuild({
|
|
42
|
+
loader: false,
|
|
43
|
+
minimize: applyOptionsChain({}, esbuildOptions)
|
|
44
|
+
})
|
|
45
|
+
]);
|
|
40
46
|
}
|
|
41
|
-
builder.addPlugins([
|
|
47
|
+
builder.addPlugins([PluginCompatModern(options)]);
|
|
42
48
|
}
|
|
43
49
|
export {
|
|
44
50
|
createWebpackBuilderForModern
|
|
@@ -10,7 +10,7 @@ function getBuilderTargets(normalizedConfig) {
|
|
|
10
10
|
if (useNodeTarget) {
|
|
11
11
|
targets.push("node");
|
|
12
12
|
}
|
|
13
|
-
const useWorkerTarget = isServiceWorker(normalizedConfig);
|
|
13
|
+
const useWorkerTarget = isProd() ? isServiceWorker(normalizedConfig) : false;
|
|
14
14
|
if (useWorkerTarget) {
|
|
15
15
|
targets.push("service-worker");
|
|
16
16
|
}
|
|
@@ -9,7 +9,7 @@ import { generateRoutes } from "../utils/routes";
|
|
|
9
9
|
import { buildServerConfig } from "../utils/config";
|
|
10
10
|
import { getServerInternalPlugins } from "../utils/getServerInternalPlugins";
|
|
11
11
|
const dev = async (api, options) => {
|
|
12
|
-
var _a
|
|
12
|
+
var _a;
|
|
13
13
|
if (options.analyze) {
|
|
14
14
|
process.env.BUNDLE_ANALYZE = "true";
|
|
15
15
|
}
|
|
@@ -41,9 +41,14 @@ const dev = async (api, options) => {
|
|
|
41
41
|
dev: {
|
|
42
42
|
port,
|
|
43
43
|
https: normalizedConfig.dev.https,
|
|
44
|
-
host: normalizedConfig.dev.host,
|
|
45
44
|
...(_a = normalizedConfig.tools) == null ? void 0 : _a.devServer
|
|
46
45
|
},
|
|
46
|
+
appContext: {
|
|
47
|
+
appDirectory: appContext.appDirectory,
|
|
48
|
+
sharedDirectory: appContext.sharedDirectory,
|
|
49
|
+
apiDirectory: appContext.apiDirectory,
|
|
50
|
+
lambdaDirectory: appContext.lambdaDirectory
|
|
51
|
+
},
|
|
47
52
|
pwd: appDirectory,
|
|
48
53
|
config: normalizedConfig,
|
|
49
54
|
serverConfigFile,
|
|
@@ -54,19 +59,12 @@ const dev = async (api, options) => {
|
|
|
54
59
|
...serverOptions,
|
|
55
60
|
compiler: null
|
|
56
61
|
});
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
port,
|
|
61
|
-
host
|
|
62
|
-
},
|
|
63
|
-
async (err) => {
|
|
64
|
-
if (err) {
|
|
65
|
-
throw err;
|
|
66
|
-
}
|
|
67
|
-
printInstructions(hookRunners, appContext, normalizedConfig);
|
|
62
|
+
app.listen(port, async (err) => {
|
|
63
|
+
if (err) {
|
|
64
|
+
throw err;
|
|
68
65
|
}
|
|
69
|
-
|
|
66
|
+
printInstructions(hookRunners, appContext, normalizedConfig);
|
|
67
|
+
});
|
|
70
68
|
} else {
|
|
71
69
|
const { server } = await appContext.builder.startDevServer({
|
|
72
70
|
printURLs: false,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logger, chalk, isApiOnly } from "@modern-js/utils";
|
|
1
|
+
import { logger, chalk, isApiOnly, getTargetDir } from "@modern-js/utils";
|
|
2
2
|
import server from "@modern-js/prod-server";
|
|
3
3
|
import { printInstructions } from "../utils/printInstructions";
|
|
4
4
|
import { injectDataLoaderPlugin } from "../utils/createServer";
|
|
@@ -18,6 +18,23 @@ const start = async (api) => {
|
|
|
18
18
|
const app = await server({
|
|
19
19
|
pwd: appDirectory,
|
|
20
20
|
config: userConfig,
|
|
21
|
+
appContext: {
|
|
22
|
+
sharedDirectory: getTargetDir(
|
|
23
|
+
appContext.sharedDirectory,
|
|
24
|
+
appContext.appDirectory,
|
|
25
|
+
appContext.distDirectory
|
|
26
|
+
),
|
|
27
|
+
apiDirectory: getTargetDir(
|
|
28
|
+
appContext.apiDirectory,
|
|
29
|
+
appContext.appDirectory,
|
|
30
|
+
appContext.distDirectory
|
|
31
|
+
),
|
|
32
|
+
lambdaDirectory: getTargetDir(
|
|
33
|
+
appContext.lambdaDirectory,
|
|
34
|
+
appContext.appDirectory,
|
|
35
|
+
appContext.distDirectory
|
|
36
|
+
)
|
|
37
|
+
},
|
|
21
38
|
serverConfigFile,
|
|
22
39
|
internalPlugins: injectDataLoaderPlugin(serverInternalPlugins),
|
|
23
40
|
apiOnly
|
|
@@ -23,7 +23,9 @@ const NESTED_ROUTE = {
|
|
|
23
23
|
PAGE_LOADER_FILE: "page.loader",
|
|
24
24
|
LOADING_FILE: "loading",
|
|
25
25
|
ERROR_FILE: "error",
|
|
26
|
-
LOADER_FILE: "loader"
|
|
26
|
+
LOADER_FILE: "loader",
|
|
27
|
+
SPLATE_FILE: "$",
|
|
28
|
+
SPLATE_LOADER_FILE: "$.loader"
|
|
27
29
|
};
|
|
28
30
|
const APP_CONFIG_NAME = "config";
|
|
29
31
|
const APP_INIT_EXPORTED = "init";
|
|
@@ -38,7 +38,8 @@ import {
|
|
|
38
38
|
getEntryOptions,
|
|
39
39
|
SERVER_BUNDLE_DIRECTORY,
|
|
40
40
|
MAIN_ENTRY_NAME,
|
|
41
|
-
removeTailSlash
|
|
41
|
+
removeTailSlash,
|
|
42
|
+
SERVER_WORKER_BUNDLE_DIRECTORY
|
|
42
43
|
} from "@modern-js/utils";
|
|
43
44
|
import { walkDirectory } from "./utils";
|
|
44
45
|
const applyBaseUrl = (baseUrl, routes) => {
|
|
@@ -101,7 +102,7 @@ const collectHtmlRoutes = (entrypoints, appContext, config) => {
|
|
|
101
102
|
const {
|
|
102
103
|
html: { disableHtmlFolder },
|
|
103
104
|
output: { distPath: { html: htmlPath } = {} },
|
|
104
|
-
server: { baseUrl, routes, ssr, ssrByEntries }
|
|
105
|
+
server: { baseUrl, routes, ssr, ssrByEntries, worker }
|
|
105
106
|
} = config;
|
|
106
107
|
const { packageName } = appContext;
|
|
107
108
|
let htmlRoutes = entrypoints.reduce(
|
|
@@ -113,6 +114,7 @@ const collectHtmlRoutes = (entrypoints, appContext, config) => {
|
|
|
113
114
|
packageName
|
|
114
115
|
);
|
|
115
116
|
const isSSR = Boolean(entryOptions);
|
|
117
|
+
const isWorker = Boolean(worker);
|
|
116
118
|
const { resHeaders } = (routes == null ? void 0 : routes[entryName]) || {};
|
|
117
119
|
let route = {
|
|
118
120
|
urlPath: `/${entryName === MAIN_ENTRY_NAME ? "" : entryName}`,
|
|
@@ -125,6 +127,7 @@ const collectHtmlRoutes = (entrypoints, appContext, config) => {
|
|
|
125
127
|
isSPA: true,
|
|
126
128
|
isSSR,
|
|
127
129
|
responseHeaders: resHeaders,
|
|
130
|
+
worker: isWorker ? `${SERVER_WORKER_BUNDLE_DIRECTORY}/${entryName}.js` : void 0,
|
|
128
131
|
bundle: isSSR ? `${SERVER_BUNDLE_DIRECTORY}/${entryName}.js` : void 0
|
|
129
132
|
};
|
|
130
133
|
if (routes == null ? void 0 : routes.hasOwnProperty(entryName)) {
|
|
@@ -49,12 +49,12 @@ import {
|
|
|
49
49
|
isDevCommand
|
|
50
50
|
} from "@modern-js/utils";
|
|
51
51
|
import { cloneDeep } from "@modern-js/utils/lodash";
|
|
52
|
-
import { createBuilderForModern } from "../builder";
|
|
53
52
|
import { printInstructions } from "../utils/printInstructions";
|
|
54
53
|
import { generateRoutes } from "../utils/routes";
|
|
55
54
|
import { emitResolvedConfig } from "../utils/config";
|
|
56
55
|
import { getSelectedEntries } from "../utils/getSelectedEntries";
|
|
57
56
|
import { initialNormalizedConfig } from "../config";
|
|
57
|
+
import { createBuilderGenerator } from "../builder";
|
|
58
58
|
import {
|
|
59
59
|
getServerLoadersFile,
|
|
60
60
|
isPageComponentFile,
|
|
@@ -67,7 +67,9 @@ import {
|
|
|
67
67
|
APP_INIT_IMPORTED
|
|
68
68
|
} from "./constants";
|
|
69
69
|
const debug = createDebugger("plugin-analyze");
|
|
70
|
-
var analyze_default = (
|
|
70
|
+
var analyze_default = ({
|
|
71
|
+
bundler
|
|
72
|
+
}) => ({
|
|
71
73
|
name: "@modern-js/plugin-analyze",
|
|
72
74
|
setup: (api) => {
|
|
73
75
|
let pagesDir = [];
|
|
@@ -159,56 +161,55 @@ var analyze_default = () => ({
|
|
|
159
161
|
if (buildCommands.includes(command)) {
|
|
160
162
|
let _b;
|
|
161
163
|
const normalizedConfig = api.useResolvedConfigContext();
|
|
164
|
+
const createBuilderForModern = yield createBuilderGenerator(bundler);
|
|
162
165
|
const builder = yield createBuilderForModern({
|
|
163
166
|
normalizedConfig,
|
|
164
167
|
appContext,
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
onBeforeBuild(_0) {
|
|
169
|
+
return __async(this, arguments, function* ({ bundlerConfigs }) {
|
|
170
|
+
const hookRunners2 = api.useHookRunners();
|
|
171
|
+
yield generateRoutes(appContext);
|
|
172
|
+
yield hookRunners2.beforeBuild({
|
|
173
|
+
bundlerConfigs
|
|
171
174
|
});
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
appContext,
|
|
192
|
-
normalizedConfig
|
|
193
|
-
);
|
|
194
|
-
}
|
|
175
|
+
});
|
|
176
|
+
},
|
|
177
|
+
onAfterBuild(_0) {
|
|
178
|
+
return __async(this, arguments, function* ({ stats }) {
|
|
179
|
+
const hookRunners2 = api.useHookRunners();
|
|
180
|
+
yield hookRunners2.afterBuild({ stats });
|
|
181
|
+
yield emitResolvedConfig(
|
|
182
|
+
appContext.appDirectory,
|
|
183
|
+
normalizedConfig
|
|
184
|
+
);
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
onDevCompileDone(_0) {
|
|
188
|
+
return __async(this, arguments, function* ({ isFirstCompile }) {
|
|
189
|
+
const hookRunners2 = api.useHookRunners();
|
|
190
|
+
if (process.stdout.isTTY || isFirstCompile) {
|
|
191
|
+
hookRunners2.afterDev();
|
|
192
|
+
if (isFirstCompile) {
|
|
193
|
+
printInstructions(hookRunners2, appContext, normalizedConfig);
|
|
195
194
|
}
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
},
|
|
198
|
+
onBeforeCreateCompiler(_0) {
|
|
199
|
+
return __async(this, arguments, function* ({ bundlerConfigs }) {
|
|
200
|
+
const hookRunners2 = api.useHookRunners();
|
|
201
|
+
yield hookRunners2.beforeCreateCompiler({
|
|
202
|
+
bundlerConfigs
|
|
196
203
|
});
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
});
|
|
205
|
-
},
|
|
206
|
-
onAfterCreateCompiler(_0) {
|
|
207
|
-
return __async(this, arguments, function* ({ compiler }) {
|
|
208
|
-
const hookRunners2 = api.useHookRunners();
|
|
209
|
-
yield hookRunners2.afterCreateCompiler({ compiler });
|
|
204
|
+
});
|
|
205
|
+
},
|
|
206
|
+
onAfterCreateCompiler(_0) {
|
|
207
|
+
return __async(this, arguments, function* ({ compiler }) {
|
|
208
|
+
const hookRunners2 = api.useHookRunners();
|
|
209
|
+
yield hookRunners2.afterCreateCompiler({
|
|
210
|
+
compiler
|
|
210
211
|
});
|
|
211
|
-
}
|
|
212
|
+
});
|
|
212
213
|
}
|
|
213
214
|
});
|
|
214
215
|
builder.addPlugins(resolvedConfig.builderPlugins);
|
|
@@ -251,7 +252,7 @@ var analyze_default = () => ({
|
|
|
251
252
|
},
|
|
252
253
|
resolvedConfig({ resolved }) {
|
|
253
254
|
const appContext = api.useAppContext();
|
|
254
|
-
const config = initialNormalizedConfig(resolved, appContext);
|
|
255
|
+
const config = initialNormalizedConfig(resolved, appContext, bundler);
|
|
255
256
|
return {
|
|
256
257
|
resolved: config
|
|
257
258
|
};
|
|
@@ -64,7 +64,7 @@ const createRoute = (routeInfo, rootDir, filename, entryName) => {
|
|
|
64
64
|
});
|
|
65
65
|
};
|
|
66
66
|
const walk = (dirname, rootDir, alias, entryName) => __async(void 0, null, function* () {
|
|
67
|
-
var _a, _b, _c;
|
|
67
|
+
var _a, _b, _c, _d;
|
|
68
68
|
if (!(yield fs.pathExists(dirname))) {
|
|
69
69
|
return null;
|
|
70
70
|
}
|
|
@@ -90,6 +90,8 @@ const walk = (dirname, rootDir, alias, entryName) => __async(void 0, null, funct
|
|
|
90
90
|
};
|
|
91
91
|
let pageLoaderFile = "";
|
|
92
92
|
let pageRoute = null;
|
|
93
|
+
let splatLoaderFile = "";
|
|
94
|
+
let splatRoute = null;
|
|
93
95
|
const items = yield fs.readdir(dirname);
|
|
94
96
|
for (const item of items) {
|
|
95
97
|
const itemPath = path.join(dirname, item);
|
|
@@ -130,6 +132,24 @@ const walk = (dirname, rootDir, alias, entryName) => __async(void 0, null, funct
|
|
|
130
132
|
}
|
|
131
133
|
(_b = route.children) == null ? void 0 : _b.push(pageRoute);
|
|
132
134
|
}
|
|
135
|
+
if (itemWithoutExt === NESTED_ROUTE.SPLATE_LOADER_FILE) {
|
|
136
|
+
splatLoaderFile = itemPath;
|
|
137
|
+
}
|
|
138
|
+
if (itemWithoutExt === NESTED_ROUTE.SPLATE_FILE) {
|
|
139
|
+
splatRoute = createRoute(
|
|
140
|
+
{
|
|
141
|
+
_component: replaceWithAlias(alias.basename, itemPath, alias.name),
|
|
142
|
+
path: "*"
|
|
143
|
+
},
|
|
144
|
+
rootDir,
|
|
145
|
+
itemPath,
|
|
146
|
+
entryName
|
|
147
|
+
);
|
|
148
|
+
if (splatLoaderFile) {
|
|
149
|
+
splatRoute.loader = splatLoaderFile;
|
|
150
|
+
}
|
|
151
|
+
(_c = route.children) == null ? void 0 : _c.push(splatRoute);
|
|
152
|
+
}
|
|
133
153
|
if (itemWithoutExt === NESTED_ROUTE.LOADING_FILE) {
|
|
134
154
|
route.loading = replaceWithAlias(alias.basename, itemPath, alias.name);
|
|
135
155
|
}
|
|
@@ -137,7 +157,7 @@ const walk = (dirname, rootDir, alias, entryName) => __async(void 0, null, funct
|
|
|
137
157
|
route.error = replaceWithAlias(alias.basename, itemPath, alias.name);
|
|
138
158
|
}
|
|
139
159
|
}
|
|
140
|
-
|
|
160
|
+
let finalRoute = createRoute(
|
|
141
161
|
route,
|
|
142
162
|
rootDir,
|
|
143
163
|
path.join(dirname, `${NESTED_ROUTE.LAYOUT_FILE}.ts`),
|
|
@@ -146,10 +166,19 @@ const walk = (dirname, rootDir, alias, entryName) => __async(void 0, null, funct
|
|
|
146
166
|
if (isPathlessLayout) {
|
|
147
167
|
delete finalRoute.path;
|
|
148
168
|
}
|
|
149
|
-
route.children = (
|
|
169
|
+
route.children = (_d = route.children) == null ? void 0 : _d.filter((childRoute) => childRoute);
|
|
150
170
|
if (route.children && route.children.length === 0 && !route.index) {
|
|
151
171
|
return null;
|
|
152
172
|
}
|
|
173
|
+
if (finalRoute.children && finalRoute.children.length === 1 && !finalRoute._component) {
|
|
174
|
+
const childRoute = finalRoute.children[0];
|
|
175
|
+
if (childRoute.path === "*") {
|
|
176
|
+
const path2 = `${finalRoute.path || ""}/${childRoute.path || ""}`;
|
|
177
|
+
finalRoute = __spreadProps(__spreadValues({}, childRoute), {
|
|
178
|
+
path: path2
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
153
182
|
return finalRoute;
|
|
154
183
|
});
|
|
155
184
|
export {
|
|
@@ -69,6 +69,7 @@ const renderFunction = ({
|
|
|
69
69
|
customBootstrap,
|
|
70
70
|
fileSystemRoutes: fileSystemRoutes2
|
|
71
71
|
}) => {
|
|
72
|
+
const bootstrap = "bootstrap(AppWrapper, MOUNT_ID, root, ReactDOM)";
|
|
72
73
|
return `
|
|
73
74
|
const finalAppConfig = {
|
|
74
75
|
...App.config,
|
|
@@ -90,7 +91,7 @@ const renderFunction = ({
|
|
|
90
91
|
|
|
91
92
|
|
|
92
93
|
if (IS_BROWSER) {
|
|
93
|
-
${customBootstrap ? `customBootstrap(AppWrapper);` :
|
|
94
|
+
${customBootstrap ? `customBootstrap(AppWrapper, () => ${bootstrap});` : `${bootstrap};`}
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
return AppWrapper
|
|
@@ -198,7 +199,6 @@ const fileSystemRoutes = (_0) => __async(void 0, [_0], function* ({
|
|
|
198
199
|
import loadable, { lazy as loadableLazy } from "@modern-js/runtime/loadable"
|
|
199
200
|
`;
|
|
200
201
|
let rootLayoutCode = ``;
|
|
201
|
-
let componentLoaderPath = "";
|
|
202
202
|
const getDataLoaderPath = (loaderId) => {
|
|
203
203
|
if (!ssrMode) {
|
|
204
204
|
return "";
|
|
@@ -211,12 +211,6 @@ const fileSystemRoutes = (_0) => __async(void 0, [_0], function* ({
|
|
|
211
211
|
}
|
|
212
212
|
return dataLoaderPath;
|
|
213
213
|
};
|
|
214
|
-
if (ssrMode) {
|
|
215
|
-
componentLoaderPath = `${path.join(
|
|
216
|
-
__dirname,
|
|
217
|
-
"../builder/loaders/routerLoader"
|
|
218
|
-
)}!`;
|
|
219
|
-
}
|
|
220
214
|
const traverseRouteTree = (route) => {
|
|
221
215
|
var _a;
|
|
222
216
|
let children;
|
|
@@ -252,10 +246,10 @@ const fileSystemRoutes = (_0) => __async(void 0, [_0], function* ({
|
|
|
252
246
|
rootLayoutCode = `import RootLayout from '${route._component}'`;
|
|
253
247
|
component = `RootLayout`;
|
|
254
248
|
} else if (ssrMode === "string") {
|
|
255
|
-
lazyImport = `() => import(/* webpackChunkName: "${route.id}" */ '${
|
|
249
|
+
lazyImport = `() => import(/* webpackChunkName: "${route.id}" */ '${route._component}')`;
|
|
256
250
|
component = `loadable(${lazyImport})`;
|
|
257
251
|
} else {
|
|
258
|
-
lazyImport = `() => import(/* webpackChunkName: "${route.id}" */ '${
|
|
252
|
+
lazyImport = `() => import(/* webpackChunkName: "${route.id}" */ '${route._component}')`;
|
|
259
253
|
component = `lazy(${lazyImport})`;
|
|
260
254
|
}
|
|
261
255
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { builderRspackProvider } from "@modern-js/builder-rspack-provider";
|
|
2
|
+
import { generateBuilder } from "../generator";
|
|
3
|
+
function createRspackBuilderForModern(options) {
|
|
4
|
+
return generateBuilder(options, builderRspackProvider);
|
|
5
|
+
}
|
|
6
|
+
export {
|
|
7
|
+
createRspackBuilderForModern
|
|
8
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { join } from "path";
|
|
2
|
+
import { createCopyPattern } from "../../shared";
|
|
3
|
+
import { RouterPlugin } from "../webpackPlugins";
|
|
4
|
+
const PluginCompatModern = (options) => ({
|
|
5
|
+
name: "builder-plugin-compat-modern",
|
|
6
|
+
setup(api) {
|
|
7
|
+
const { normalizedConfig: modernConfig, appContext } = options;
|
|
8
|
+
api.modifyWebpackChain((chain, { CHAIN_ID }) => {
|
|
9
|
+
var _a;
|
|
10
|
+
chain.resolve.modules.add("node_modules").add(join(api.context.rootPath, "node_modules"));
|
|
11
|
+
if (chain.plugins.has(CHAIN_ID.PLUGIN.COPY)) {
|
|
12
|
+
const defaultCopyPattern = createCopyPattern(
|
|
13
|
+
appContext,
|
|
14
|
+
modernConfig,
|
|
15
|
+
"public",
|
|
16
|
+
chain
|
|
17
|
+
);
|
|
18
|
+
chain.plugin(CHAIN_ID.PLUGIN.COPY).tap((args) => {
|
|
19
|
+
var _a2;
|
|
20
|
+
return [
|
|
21
|
+
{
|
|
22
|
+
patterns: [...((_a2 = args[0]) == null ? void 0 : _a2.patterns) || [], defaultCopyPattern]
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const { entrypoints } = appContext;
|
|
28
|
+
const existNestedRoutes = entrypoints.some(
|
|
29
|
+
(entrypoint) => entrypoint.nestedRoutesEntry
|
|
30
|
+
);
|
|
31
|
+
const routerConfig = (_a = modernConfig == null ? void 0 : modernConfig.runtime) == null ? void 0 : _a.router;
|
|
32
|
+
const routerManifest = Boolean(routerConfig == null ? void 0 : routerConfig.manifest);
|
|
33
|
+
if (existNestedRoutes || routerManifest) {
|
|
34
|
+
chain.plugin("route-plugin").use(RouterPlugin);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
export {
|
|
40
|
+
PluginCompatModern
|
|
41
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __async = (__this, __arguments, generator) => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
var fulfilled = (value) => {
|
|
23
|
+
try {
|
|
24
|
+
step(generator.next(value));
|
|
25
|
+
} catch (e) {
|
|
26
|
+
reject(e);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var rejected = (value) => {
|
|
30
|
+
try {
|
|
31
|
+
step(generator.throw(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
reject(e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
import {
|
|
41
|
+
builderWebpackProvider
|
|
42
|
+
} from "@modern-js/builder-webpack-provider";
|
|
43
|
+
import { applyOptionsChain } from "@modern-js/utils";
|
|
44
|
+
import { createCopyPattern } from "../shared";
|
|
45
|
+
import { generateBuilder } from "../generator";
|
|
46
|
+
import { PluginCompatModern } from "./builderPlugins/compatModern";
|
|
47
|
+
function createWebpackBuilderForModern(options) {
|
|
48
|
+
return generateBuilder(options, builderWebpackProvider, {
|
|
49
|
+
modifyBuilderConfig(config) {
|
|
50
|
+
modifyOutputConfig(config, options.appContext);
|
|
51
|
+
},
|
|
52
|
+
modifyBuilderInstance(builder) {
|
|
53
|
+
return __async(this, null, function* () {
|
|
54
|
+
yield applyBuilderPlugins(builder, options);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function modifyOutputConfig(config, appContext) {
|
|
60
|
+
config.output = createOutputConfig(config, appContext);
|
|
61
|
+
function createOutputConfig(config2, appContext2) {
|
|
62
|
+
const defaultCopyPattern = createCopyPattern(appContext2, config2, "upload");
|
|
63
|
+
const { copy } = config2.output;
|
|
64
|
+
const copyOptions = Array.isArray(copy) ? copy : copy == null ? void 0 : copy.patterns;
|
|
65
|
+
const builderCopy = [...copyOptions || [], defaultCopyPattern];
|
|
66
|
+
return __spreadProps(__spreadValues({}, config2.output), {
|
|
67
|
+
copy: builderCopy
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function applyBuilderPlugins(builder, options) {
|
|
72
|
+
return __async(this, null, function* () {
|
|
73
|
+
const { normalizedConfig } = options;
|
|
74
|
+
if (!normalizedConfig.output.disableNodePolyfill) {
|
|
75
|
+
const { PluginNodePolyfill } = yield import("@modern-js/builder-plugin-node-polyfill");
|
|
76
|
+
builder.addPlugins([PluginNodePolyfill()]);
|
|
77
|
+
}
|
|
78
|
+
if (normalizedConfig.tools.esbuild) {
|
|
79
|
+
const { esbuild: esbuildOptions } = normalizedConfig.tools;
|
|
80
|
+
const { PluginEsbuild } = yield import("@modern-js/builder-plugin-esbuild");
|
|
81
|
+
builder.addPlugins([
|
|
82
|
+
PluginEsbuild({
|
|
83
|
+
loader: false,
|
|
84
|
+
minimize: applyOptionsChain({}, esbuildOptions)
|
|
85
|
+
})
|
|
86
|
+
]);
|
|
87
|
+
}
|
|
88
|
+
builder.addPlugins([PluginCompatModern(options)]);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
export {
|
|
92
|
+
createWebpackBuilderForModern
|
|
93
|
+
};
|
|
@@ -32,6 +32,9 @@ class RouterPlugin {
|
|
|
32
32
|
if (target === "node" || Array.isArray(target) && target.includes("node")) {
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
+
if (target === "webworker" || Array.isArray(target) && target.includes("webworker")) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
35
38
|
const { webpack } = compiler;
|
|
36
39
|
const { Compilation, sources } = webpack;
|
|
37
40
|
const { RawSource } = sources;
|
|
@@ -109,5 +112,5 @@ class RouterPlugin {
|
|
|
109
112
|
}
|
|
110
113
|
}
|
|
111
114
|
export {
|
|
112
|
-
RouterPlugin
|
|
115
|
+
RouterPlugin
|
|
113
116
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./RouterPlugin";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
function createBuilderOptions(target, appContext) {
|
|
2
|
+
const entries = {};
|
|
3
|
+
const { entrypoints = [], checkedEntries } = appContext;
|
|
4
|
+
for (const { entryName, entry } of entrypoints) {
|
|
5
|
+
if (checkedEntries && !checkedEntries.includes(entryName)) {
|
|
6
|
+
continue;
|
|
7
|
+
}
|
|
8
|
+
if (entryName in entries) {
|
|
9
|
+
entries[entryName].push(entry);
|
|
10
|
+
} else {
|
|
11
|
+
entries[entryName] = [entry];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
cwd: appContext.appDirectory,
|
|
16
|
+
target,
|
|
17
|
+
configPath: appContext.configFile || void 0,
|
|
18
|
+
entry: entries,
|
|
19
|
+
framework: appContext.metaName
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
createBuilderOptions
|
|
24
|
+
};
|