@flatjs/evolve 1.8.1-next.72 → 1.8.1-next.73
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/CHANGELOG.md +6 -0
- package/dist/constants.js +1 -17
- package/dist/create-webpack/create-externals.js +1 -6
- package/dist/create-webpack/create-optimization.js +1 -29
- package/dist/create-webpack/create-output.js +1 -35
- package/dist/create-webpack/create-performance.js +1 -7
- package/dist/create-webpack/create-plugins.js +1 -78
- package/dist/create-webpack/create-resolve.js +1 -31
- package/dist/create-webpack/create-rule-sets.js +1 -16
- package/dist/create-webpack/load-webpack-config.js +1 -55
- package/dist/create-webpack/rule-sets/constants.js +1 -3
- package/dist/create-webpack/rule-sets/rule-assets.js +1 -44
- package/dist/create-webpack/rule-sets/rule-css.js +1 -84
- package/dist/create-webpack/rule-sets/rule-less.js +1 -45
- package/dist/create-webpack/rule-sets/rule-scripts.js +1 -27
- package/dist/create-webpack/rule-sets/rule-svg-icon.js +1 -25
- package/dist/create-webpack/rule-sets/rule-utils.js +1 -10
- package/dist/create-webpack/types.js +1 -1
- package/dist/default-options.js +1 -80
- package/dist/define-config/define-config.js +1 -4
- package/dist/define-config/index.js +1 -1
- package/dist/dev-server/add-compiler-to-dev-server.js +1 -47
- package/dist/dev-server/create-app-page-route.js +1 -11
- package/dist/dev-server/create-dev-server-compiler-tasks.js +1 -51
- package/dist/dev-server/create-dev-server-entries.js +1 -27
- package/dist/dev-server/create-dev-server.js +1 -23
- package/dist/dev-server/index.js +1 -6
- package/dist/dev-server/middlewares/create-page-middleware.js +1 -164
- package/dist/dev-server/middlewares/create-public-assets-middleware.js +1 -25
- package/dist/dev-server/middlewares/index.js +1 -2
- package/dist/errors/evolve-build-error.js +1 -10
- package/dist/helpers/allow-px2rem-for-module.js +1 -6
- package/dist/helpers/assert-only-single-entry-item.js +1 -23
- package/dist/helpers/chunk-entry-map.js +1 -21
- package/dist/helpers/enable-bundle-hashname-for-module.js +1 -6
- package/dist/helpers/filter-actived-entries.js +1 -41
- package/dist/helpers/get-bundle-file-name.js +1 -23
- package/dist/helpers/get-git-root.js +1 -4
- package/dist/helpers/get-html-plugin-config.js +1 -47
- package/dist/helpers/get-max-process-tasks.js +1 -7
- package/dist/helpers/get-pacakge-dir.js +1 -13
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.js +1 -15
- package/dist/helpers/json-serializer.d.ts +7 -0
- package/dist/helpers/json-serializer.js +1 -0
- package/dist/helpers/merge-babel-options.js +1 -45
- package/dist/helpers/normalize-entry-map.js +1 -38
- package/dist/helpers/open-page.js +1 -15
- package/dist/helpers/print-log.js +1 -49
- package/dist/helpers/refresh-evolve-mock-options.js +1 -29
- package/dist/helpers/resolve-entry-map-input-files.js +1 -20
- package/dist/helpers/script-injects.js +1 -39
- package/dist/helpers/should-enable-react-fast-refresh.js +1 -8
- package/dist/helpers/split-to-multi-compiler.js +1 -22
- package/dist/index.js +1 -5
- package/dist/load-config/index.js +1 -1
- package/dist/load-config/load-evolve-config.js +1 -35
- package/dist/main/env-verify.js +1 -21
- package/dist/main/index.js +1 -4
- package/dist/main/prepare-build.js +1 -38
- package/dist/main/prepare-serve.js +1 -36
- package/dist/main/prepare-static.js +1 -28
- package/dist/main/start-build-dynamic.js +1 -144
- package/dist/main/start-build-worker.d.ts +2 -4
- package/dist/main/start-build-worker.js +1 -41
- package/dist/main/start-build.js +1 -49
- package/dist/main/start-one-entry-build.js +1 -35
- package/dist/main/start-serve.js +1 -32
- package/dist/main/start-static.js +1 -16
- package/dist/minimizer/create-minimizers.js +1 -25
- package/dist/minimizer/default-options.js +1 -14
- package/dist/minimizer/image-minimizer.js +1 -56
- package/dist/minimizer/index.js +1 -1
- package/dist/minimizer/terser-minimizer.js +3 -15
- package/dist/minimizer/types.js +1 -1
- package/dist/plugins/clean-webpack/clean-webpack-plugin.js +1 -173
- package/dist/plugins/clean-webpack/index.js +1 -22
- package/dist/plugins/define-variable/define-variable-plugin.js +1 -21
- package/dist/plugins/define-variable/index.js +1 -1
- package/dist/plugins/html-inject-scripts/plugin-html-inject-script.js +1 -27
- package/dist/plugins/module-federation/external-template-remotes.js +1 -92
- package/dist/plugins/module-federation/index.js +1 -1
- package/dist/plugins/module-federation/module-federation.js +1 -98
- package/dist/plugins/multi-html/index.js +1 -15
- package/dist/plugins/multi-html/multi-html-cdn-plugin.js +1 -84
- package/dist/plugins/multi-html/multi-html-plugin.js +1 -70
- package/dist/types/index.js +1 -8
- package/dist/types/types-ci.js +1 -1
- package/dist/types/types-dev-server.js +1 -1
- package/dist/types/types-entry-map.js +1 -1
- package/dist/types/types-federation.js +1 -1
- package/dist/types/types-loader-options.js +1 -1
- package/dist/types/types-modular-import.js +1 -1
- package/dist/types/types-multi-html.js +1 -1
- package/dist/types/types-options.js +1 -1
- package/dist/types/types-plugin-options.js +1 -1
- package/dist/types/types-webpack.js +1 -1
- package/package.json +2 -2
package/dist/default-options.js
CHANGED
@@ -1,80 +1 @@
|
|
1
|
-
export const defaultEvolveOptions
|
2
|
-
projectCwd: process.cwd(),
|
3
|
-
projectVirtualPath: 'flatjs/evolve',
|
4
|
-
rejectWarnings: false,
|
5
|
-
devServer: {
|
6
|
-
autoOpen: true,
|
7
|
-
mockOptions: {
|
8
|
-
mockBaseDir: 'mocks',
|
9
|
-
},
|
10
|
-
clientOverlay: {
|
11
|
-
errors: true,
|
12
|
-
warnings: false,
|
13
|
-
},
|
14
|
-
middlewares: [],
|
15
|
-
watchOptions: {
|
16
|
-
poll: 1000,
|
17
|
-
// Use array here, easy can add a new ignore dynamic at runtime.
|
18
|
-
ignored: ['**/node_modules', '**/mocks'],
|
19
|
-
aggregateTimeout: 500,
|
20
|
-
},
|
21
|
-
defaultServeGlobalData: () => Promise.resolve({}),
|
22
|
-
},
|
23
|
-
webpack: {
|
24
|
-
// The default is es5
|
25
|
-
target: ['web', 'es5'],
|
26
|
-
plugins: [],
|
27
|
-
ruleSets: [],
|
28
|
-
publicPath: 'auto',
|
29
|
-
externals: {
|
30
|
-
vue: 'Vue',
|
31
|
-
react: 'React',
|
32
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
33
|
-
'react-dom': 'ReactDOM',
|
34
|
-
},
|
35
|
-
outputDir: 'public',
|
36
|
-
enableBundleHashName: true,
|
37
|
-
},
|
38
|
-
pluginOptions: {},
|
39
|
-
loaderOptions: {
|
40
|
-
assetDataUrlMaxSize: 4 * 1024,
|
41
|
-
babelOptions: {
|
42
|
-
// 默认值的必须使用object类型, 如果使用函数, 会导致merge默认值失败.
|
43
|
-
usePreset: 'react',
|
44
|
-
plugins: [],
|
45
|
-
presets: [],
|
46
|
-
},
|
47
|
-
runTsChecker: true,
|
48
|
-
lessOptions: {},
|
49
|
-
postcssOptions: {
|
50
|
-
cssnanoOptions: {},
|
51
|
-
},
|
52
|
-
pixelOptions: {
|
53
|
-
rootValue: { px: 100, rpx: 1 },
|
54
|
-
outputUnit: 'rem',
|
55
|
-
},
|
56
|
-
// Always defined in evolve.config.js
|
57
|
-
modularImports: [],
|
58
|
-
},
|
59
|
-
entryMap: {},
|
60
|
-
// The configurations for plugin `@flatjs/evolve`, `multi-cdn-plugin`
|
61
|
-
multiHtmlCdn: {},
|
62
|
-
// Do not use arrow function here.
|
63
|
-
multiHtmlCdnEnvResolver: function cdnResolver() {
|
64
|
-
return undefined;
|
65
|
-
},
|
66
|
-
needVerifyPackages: {},
|
67
|
-
packageInstallChecker: {
|
68
|
-
enabled: false,
|
69
|
-
detectModules: ['@dimjs/*'],
|
70
|
-
throwError: false,
|
71
|
-
showAllInstalledGraph: true,
|
72
|
-
},
|
73
|
-
maxProcesses: '50%',
|
74
|
-
/**
|
75
|
-
* CI default configurations.
|
76
|
-
*/
|
77
|
-
ci: {
|
78
|
-
basedBranch: 'master',
|
79
|
-
},
|
80
|
-
};
|
1
|
+
export const defaultEvolveOptions={projectCwd:process.cwd(),projectVirtualPath:"flatjs/evolve",rejectWarnings:!1,devServer:{autoOpen:!0,mockOptions:{mockBaseDir:"mocks"},clientOverlay:{errors:!0,warnings:!1},middlewares:[],watchOptions:{poll:1e3,ignored:["**/node_modules","**/mocks"],aggregateTimeout:500},defaultServeGlobalData:()=>Promise.resolve({})},webpack:{target:["web","es5"],plugins:[],ruleSets:[],publicPath:"auto",externals:{vue:"Vue",react:"React","react-dom":"ReactDOM"},outputDir:"public",enableBundleHashName:!0},pluginOptions:{},loaderOptions:{assetDataUrlMaxSize:4096,babelOptions:{usePreset:"react",plugins:[],presets:[]},runTsChecker:!0,lessOptions:{},postcssOptions:{cssnanoOptions:{}},pixelOptions:{rootValue:{px:100,rpx:1},outputUnit:"rem"},modularImports:[]},entryMap:{},multiHtmlCdn:{},multiHtmlCdnEnvResolver:function cdnResolver(){},needVerifyPackages:{},packageInstallChecker:{enabled:!1,detectModules:["@dimjs/*"],throwError:!1,showAllInstalledGraph:!0},maxProcesses:"50%",ci:{basedBranch:"master"}};
|
@@ -1 +1 @@
|
|
1
|
-
export
|
1
|
+
export*from"./define-config.js";
|
@@ -1,47 +1 @@
|
|
1
|
-
import
|
2
|
-
import WebpackDevServer from 'webpack-dev-server';
|
3
|
-
/**
|
4
|
-
* Integrated webpack-dev-server with `mock` server together
|
5
|
-
* @param compiler Webpack compiler(s)
|
6
|
-
* @param enableHmr Value indicates if we need to liveReload or `HMR`
|
7
|
-
* @param devPort The port number of `@flatjs/mock`
|
8
|
-
* @param evolveOptions The configuration of `@flatjs/evolve` (FlatEvolveOptions)
|
9
|
-
*/
|
10
|
-
export const addCompilerToDevServer = (compiler, enableHmr, devPort, evolveOptions) => {
|
11
|
-
const { projectCwd, devServer } = evolveOptions;
|
12
|
-
const server = new WebpackDevServer({
|
13
|
-
server: {
|
14
|
-
type: devServer?.https ? 'https' : 'http',
|
15
|
-
options: {
|
16
|
-
// Load https
|
17
|
-
...devServer?.https,
|
18
|
-
},
|
19
|
-
},
|
20
|
-
open: false,
|
21
|
-
compress: true,
|
22
|
-
port: devPort,
|
23
|
-
hot: enableHmr,
|
24
|
-
liveReload: !enableHmr,
|
25
|
-
// Enable firewall or set hosts that are allowed to access the dev server.
|
26
|
-
allowedHosts: 'all',
|
27
|
-
static: {
|
28
|
-
directory: `${join(projectCwd, '/public')}`,
|
29
|
-
},
|
30
|
-
headers: {
|
31
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
32
|
-
'Access-Control-Allow-Origin': '*',
|
33
|
-
},
|
34
|
-
client: {
|
35
|
-
progress: true,
|
36
|
-
overlay: devServer?.clientOverlay,
|
37
|
-
},
|
38
|
-
}, compiler);
|
39
|
-
return new Promise((resolve, reject) => {
|
40
|
-
server.startCallback((err) => {
|
41
|
-
if (err) {
|
42
|
-
return reject(err);
|
43
|
-
}
|
44
|
-
resolve(true);
|
45
|
-
});
|
46
|
-
});
|
47
|
-
};
|
1
|
+
import{join}from"node:path";import WebpackDevServer from"webpack-dev-server";export const addCompilerToDevServer=(e,r,t,o)=>{const{projectCwd:p,devServer:s}=o,l=new WebpackDevServer({server:{type:s?.https?"https":"http",options:{...s?.https}},open:!1,compress:!0,port:t,hot:r,liveReload:!r,allowedHosts:"all",static:{directory:`${join(p,"/public")}`},headers:{"Access-Control-Allow-Origin":"*"},client:{progress:!0,overlay:s?.clientOverlay}},e);return new Promise(((e,r)=>{l.startCallback((t=>{if(t)return r(t);e(!0)}))}))};
|
@@ -1,11 +1 @@
|
|
1
|
-
import
|
2
|
-
/**
|
3
|
-
* Add route `/pages`, `*` to main web-server
|
4
|
-
*/
|
5
|
-
export const createAppPageRoute = (projectCwd, app, devHostUri, servedDevServerEntries, evolveOptions) => {
|
6
|
-
const { devServer } = evolveOptions;
|
7
|
-
// Attach request handlers for context `/page/*`
|
8
|
-
app.use('/pages', ...createPageMiddleware(devHostUri, devServer?.mockOptions?.apiContext || 'api', servedDevServerEntries, evolveOptions));
|
9
|
-
// handle all no-matched page request.
|
10
|
-
app.use('*', createPublicAssetsMiddleware(projectCwd));
|
11
|
-
};
|
1
|
+
import{createPageMiddleware,createPublicAssetsMiddleware}from"./middlewares/index.js";export const createAppPageRoute=(e,a,r,t,s)=>{const{devServer:d}=s;a.use("/pages",...createPageMiddleware(r,d?.mockOptions?.apiContext||"api",t,s)),a.use("*",createPublicAssetsMiddleware(e))};
|
@@ -1,51 +1 @@
|
|
1
|
-
import {
|
2
|
-
import { chalk, logger, mergeOptions, urlJoin } from '@flatjs/common';
|
3
|
-
import webpack from 'webpack';
|
4
|
-
import { loadWebpackConfig } from '../create-webpack/load-webpack-config.js';
|
5
|
-
import { shouldEnableReactFastRefresh } from '../helpers/should-enable-react-fast-refresh.js';
|
6
|
-
import { splitToMultiCompilerConfigs } from '../helpers/split-to-multi-compiler.js';
|
7
|
-
import { addCompilerToDevServer } from './add-compiler-to-dev-server.js';
|
8
|
-
export const createDevServerCompilerTasks = async (projectCwd, mainPage, servedDevServerEntries, evolveOptions) => {
|
9
|
-
const serveTaks = [];
|
10
|
-
for (const [entryName, servedDevServerEntry] of Object.entries(servedDevServerEntries)) {
|
11
|
-
const itemEntryConfig = servedDevServerEntry.entryConfig;
|
12
|
-
const moduleFederation = itemEntryConfig.options?.moduleFederation;
|
13
|
-
const enabledHmr = shouldEnableReactFastRefresh(true, [entryName, itemEntryConfig], evolveOptions);
|
14
|
-
const moduleFederationRemotes = moduleFederation?.remotes || [];
|
15
|
-
moduleFederationRemotes.forEach((remote) => {
|
16
|
-
// Dynamic construct remote endpoint as hostUri
|
17
|
-
remote.endpoint = (shortName) => {
|
18
|
-
const servedDevServerEntry = servedDevServerEntries[shortName];
|
19
|
-
if (!servedDevServerEntry) {
|
20
|
-
throw new Error(`No servedDevServerEntry found via "${shortName}"`);
|
21
|
-
}
|
22
|
-
return urlJoin(servedDevServerEntry?.devServerHostUri, ['/public']);
|
23
|
-
};
|
24
|
-
});
|
25
|
-
const { devServerPort, devServerHostUri } = servedDevServerEntries[entryName];
|
26
|
-
const singleEvolveEntryMap = {
|
27
|
-
// e.g. `home`
|
28
|
-
[entryName]: itemEntryConfig,
|
29
|
-
};
|
30
|
-
// e.g. `http://dev.flatjs.com:3002/public/`
|
31
|
-
const servePublicPath = urlJoin(devServerHostUri, ['public']);
|
32
|
-
const webpackConfig = await loadWebpackConfig('development', singleEvolveEntryMap, mergeOptions(evolveOptions, {
|
33
|
-
webpack: {
|
34
|
-
publicPath: servePublicPath,
|
35
|
-
},
|
36
|
-
}));
|
37
|
-
const compiler = webpack(splitToMultiCompilerConfigs(singleEvolveEntryMap, webpackConfig, evolveOptions)[0]);
|
38
|
-
serveTaks.push(
|
39
|
-
// create webpack dev server instance.
|
40
|
-
addCompilerToDevServer(compiler, enabledHmr, devServerPort, evolveOptions));
|
41
|
-
const title = compiler.name || '';
|
42
|
-
compiler.hooks.invalid.tap('fileChange', (fileName) => {
|
43
|
-
const relativeFileName = relative(projectCwd, fileName || '');
|
44
|
-
logger.info(`file change ➩ ${chalk(['cyan'])(relativeFileName)}`, title);
|
45
|
-
});
|
46
|
-
compiler.hooks.done.tap('compileDone', () => {
|
47
|
-
logger.info(`debug page ➩ ${chalk(['cyan'])(mainPage)}`, title);
|
48
|
-
});
|
49
|
-
}
|
50
|
-
return serveTaks;
|
51
|
-
};
|
1
|
+
import{relative}from"node:path";import{chalk,logger,mergeOptions,urlJoin}from"@flatjs/common";import webpack from"webpack";import{loadWebpackConfig}from"../create-webpack/load-webpack-config.js";import{shouldEnableReactFastRefresh}from"../helpers/should-enable-react-fast-refresh.js";import{splitToMultiCompilerConfigs}from"../helpers/split-to-multi-compiler.js";import{addCompilerToDevServer}from"./add-compiler-to-dev-server.js";export const createDevServerCompilerTasks=async(e,o,r,t)=>{const i=[];for(const[a,n]of Object.entries(r)){const l=n.entryConfig,s=l.options?.moduleFederation,p=shouldEnableReactFastRefresh(!0,[a,l],t);(s?.remotes||[]).forEach((e=>{e.endpoint=e=>{const o=r[e];if(!o)throw new Error(`No servedDevServerEntry found via "${e}"`);return urlJoin(o?.devServerHostUri,["/public"])}}));const{devServerPort:c,devServerHostUri:m}=r[a],f={[a]:l},d=urlJoin(m,["public"]),v=await loadWebpackConfig("development",f,mergeOptions(t,{webpack:{publicPath:d}})),h=webpack(splitToMultiCompilerConfigs(f,v,t)[0]);i.push(addCompilerToDevServer(h,p,c,t));const g=h.name||"";h.hooks.invalid.tap("fileChange",(o=>{const r=relative(e,o||"");logger.info(`file change ➩ ${chalk(["cyan"])(r)}`,g)})),h.hooks.done.tap("compileDone",(()=>{logger.info(`debug page ➩ ${chalk(["cyan"])(o)}`,g)}))}return i};
|
@@ -1,27 +1 @@
|
|
1
|
-
import
|
2
|
-
import { prepareMockDomain } from '@flatjs/mock';
|
3
|
-
import { normalizeEvolveEntryName } from '../helpers/normalize-entry-map.js';
|
4
|
-
export const createDevServerEntries = async (startPort, servedEntries, evolveOptions) => {
|
5
|
-
const { devServer, projectVirtualPath } = evolveOptions;
|
6
|
-
const servedDevServerEntries = {};
|
7
|
-
// https://github.com/webpack/webpack-dev-server/issues/2692
|
8
|
-
// For `webpack-dev-server@4.0.0` we should run dev server on each compiler
|
9
|
-
let makeLastestPort = startPort;
|
10
|
-
// Prepare devServer ports for each served entry.
|
11
|
-
for (const [entryName, entryConfig] of Object.entries(servedEntries)) {
|
12
|
-
makeLastestPort = makeLastestPort + 1;
|
13
|
-
// Create individual devPort for each compiler here.
|
14
|
-
const { mockPort: devServerPort, hostUri: devServerHostUri } = await prepareMockDomain(mergeOptions(devServer?.mockOptions || {}, {
|
15
|
-
port: makeLastestPort,
|
16
|
-
}));
|
17
|
-
// entryName: `home` should be normallized to ${`projectVirtualPath`}/home
|
18
|
-
const normalizedEntryName = normalizeEvolveEntryName(entryName, projectVirtualPath);
|
19
|
-
servedDevServerEntries[entryName] = {
|
20
|
-
entryConfig,
|
21
|
-
devServerPort,
|
22
|
-
devServerHostUri,
|
23
|
-
normalizedEntryName,
|
24
|
-
};
|
25
|
-
}
|
26
|
-
return servedDevServerEntries;
|
27
|
-
};
|
1
|
+
import{mergeOptions}from"@flatjs/common";import{prepareMockDomain}from"@flatjs/mock";import{normalizeEvolveEntryName}from"../helpers/normalize-entry-map.js";export const createDevServerEntries=async(r,e,o)=>{const{devServer:t,projectVirtualPath:n}=o,m={};let a=r;for(const[r,o]of Object.entries(e)){a+=1;const{mockPort:e,hostUri:i}=await prepareMockDomain(mergeOptions(t?.mockOptions||{},{port:a})),s=normalizeEvolveEntryName(r,n);m[r]={entryConfig:o,devServerPort:e,devServerHostUri:i,normalizedEntryName:s}}return m};
|
@@ -1,23 +1 @@
|
|
1
|
-
import https from
|
2
|
-
import { prepareMockDomain } from '@flatjs/mock';
|
3
|
-
import express from 'express';
|
4
|
-
export const createDevServer = async (evolveOptions) => {
|
5
|
-
const app = express();
|
6
|
-
const mockOptions = evolveOptions.devServer?.mockOptions;
|
7
|
-
const { mockPort, hostUri } = await prepareMockDomain(mockOptions || {});
|
8
|
-
return new Promise((resolve) => {
|
9
|
-
// Https
|
10
|
-
const httpsServer = evolveOptions.devServer?.https
|
11
|
-
? https.createServer(evolveOptions.devServer?.https, app)
|
12
|
-
: app;
|
13
|
-
// Attach hostUri to application instance without last slash `/`.
|
14
|
-
app.set('hostUri', hostUri);
|
15
|
-
httpsServer.listen(mockPort, () => {
|
16
|
-
resolve({
|
17
|
-
app,
|
18
|
-
devHostUri: hostUri,
|
19
|
-
devPort: mockPort,
|
20
|
-
});
|
21
|
-
});
|
22
|
-
});
|
23
|
-
};
|
1
|
+
import https from"node:https";import{prepareMockDomain}from"@flatjs/mock";import express from"express";export const createDevServer=async e=>{const r=express(),t=e.devServer?.mockOptions,{mockPort:o,hostUri:s}=await prepareMockDomain(t||{});return new Promise((t=>{const p=e.devServer?.https?https.createServer(e.devServer?.https,r):r;r.set("hostUri",s),p.listen(o,(()=>{t({app:r,devHostUri:s,devPort:o})}))}))};
|
package/dist/dev-server/index.js
CHANGED
@@ -1,6 +1 @@
|
|
1
|
-
export
|
2
|
-
export * from './add-compiler-to-dev-server.js';
|
3
|
-
export * from './create-dev-server.js';
|
4
|
-
export * from './create-app-page-route.js';
|
5
|
-
export * from './create-dev-server-entries.js';
|
6
|
-
export * from './create-dev-server-compiler-tasks.js';
|
1
|
+
export*from"./middlewares/index.js";export*from"./add-compiler-to-dev-server.js";export*from"./create-dev-server.js";export*from"./create-app-page-route.js";export*from"./create-dev-server-entries.js";export*from"./create-dev-server-compiler-tasks.js";
|
@@ -1,164 +1 @@
|
|
1
|
-
import {
|
2
|
-
import { isAbsolute, join } from 'node:path';
|
3
|
-
import { ensureSlash, urlJoin } from '@flatjs/common';
|
4
|
-
import _ from 'lodash';
|
5
|
-
import { allowPx2remForModule } from '../../helpers/allow-px2rem-for-module.js';
|
6
|
-
import { getHtmlPluginConfig, } from '../../helpers/get-html-plugin-config.js';
|
7
|
-
import { getPackageDir } from '../../helpers/get-pacakge-dir.js';
|
8
|
-
import { normalizeEvolveEntryName } from '../../helpers/normalize-entry-map.js';
|
9
|
-
import { injectFederationScripts } from '../../helpers/script-injects.js';
|
10
|
-
const getPageMainHtml = async (servedDevServerEntries, devHostUri, evolveOptions) => {
|
11
|
-
const evolveCwd = getPackageDir();
|
12
|
-
const templateStr = readFileSync(join(evolveCwd, './templates/main.html'), 'utf-8');
|
13
|
-
const sortedModules = [];
|
14
|
-
const virtualPath = evolveOptions.projectVirtualPath.replace(/^\//, '');
|
15
|
-
for (const [entryName, entryContent] of Object.entries(evolveOptions.entryMap)) {
|
16
|
-
// Allow customized page main link.
|
17
|
-
const servePageMainLinkFn = entryContent.options?.servePageMainLinkFn || ((link) => link);
|
18
|
-
// `home`, servedDevServerEntries[key] => `home`
|
19
|
-
const isServedEntry = Object.keys(servedDevServerEntries).includes(entryName);
|
20
|
-
// `flatjs/evolve/home`
|
21
|
-
const normalizedEntryName = normalizeEvolveEntryName(entryName, virtualPath);
|
22
|
-
const linkHref = urlJoin(devHostUri, ['pages', normalizedEntryName], {
|
23
|
-
env: 'me',
|
24
|
-
});
|
25
|
-
sortedModules.push({
|
26
|
-
name: entryName.replace(virtualPath, '').replace(/^\//, ''),
|
27
|
-
link: servePageMainLinkFn(linkHref, {
|
28
|
-
hostUri: devHostUri,
|
29
|
-
entryName,
|
30
|
-
virtualPath,
|
31
|
-
}),
|
32
|
-
flagText: isServedEntry ? 'serve' : 'static',
|
33
|
-
isServed: isServedEntry ? 1 : 0,
|
34
|
-
});
|
35
|
-
}
|
36
|
-
const templateData = {
|
37
|
-
title: '@flatjs/evolve',
|
38
|
-
modules: sortedModules.sort((a, b) => {
|
39
|
-
return b.isServed - a.isServed;
|
40
|
-
}),
|
41
|
-
};
|
42
|
-
return _.template(templateStr)(templateData);
|
43
|
-
};
|
44
|
-
const getPageModuleHtml = async (servedDevServerEntries, req, devHostUri, apiContext, evolveOptions) => {
|
45
|
-
const { entryMap, projectVirtualPath } = evolveOptions;
|
46
|
-
// normalize to ['a/b','a/b/c','inn/app/transfer_list','inn/app/transfer']
|
47
|
-
const entryNames = Object.keys(entryMap).sort((a, b) => b.length - a.length);
|
48
|
-
const evolveCwd = getPackageDir();
|
49
|
-
const currEntry = entryNames.find((entryName) => {
|
50
|
-
const normalizedEntryName = normalizeEvolveEntryName(entryName, projectVirtualPath);
|
51
|
-
return ensureSlash(req.path.replace(/^\//, ''), true).startsWith(ensureSlash(normalizedEntryName, true));
|
52
|
-
});
|
53
|
-
if (!currEntry) {
|
54
|
-
const notFoundTemplateStr = readFileSync(join(evolveCwd, `./templates/module-404.html`), 'utf-8');
|
55
|
-
return _.template(notFoundTemplateStr)({
|
56
|
-
title: '404 Not Found',
|
57
|
-
errorMeta: [
|
58
|
-
{
|
59
|
-
name: `@flatjs/evolve workspace`,
|
60
|
-
value: evolveCwd,
|
61
|
-
},
|
62
|
-
{
|
63
|
-
name: `served entry names`,
|
64
|
-
value: JSON.stringify(entryNames),
|
65
|
-
},
|
66
|
-
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
67
|
-
{ name: `module path`, value: `${req.path}` },
|
68
|
-
],
|
69
|
-
});
|
70
|
-
}
|
71
|
-
const normalizedCurrEntry = normalizeEvolveEntryName(currEntry, projectVirtualPath);
|
72
|
-
const currEntryItem = entryMap[currEntry];
|
73
|
-
const currEntryOption = currEntryItem.options;
|
74
|
-
// currEntry: `home`
|
75
|
-
const currDevServerEntry = servedDevServerEntries[currEntry];
|
76
|
-
// Maybe No currEntry found in servedDevServerEntries, use default `hostUri`, e.g. `static` mode.
|
77
|
-
const devServerHostUri = currDevServerEntry?.devServerHostUri || devHostUri;
|
78
|
-
const moduleTemplate =
|
79
|
-
// eslint-disable-next-line sonarjs/no-duplicate-string
|
80
|
-
currEntryOption?.serveModuleTemplate || './templates/module.html';
|
81
|
-
const projectHostedModuleTemplate = join(evolveOptions.projectCwd, './templates/module.html');
|
82
|
-
const templateStr = readFileSync(isAbsolute(moduleTemplate)
|
83
|
-
? moduleTemplate
|
84
|
-
: existsSync(projectHostedModuleTemplate)
|
85
|
-
? projectHostedModuleTemplate
|
86
|
-
: join(evolveCwd, './templates/module.html'), 'utf-8');
|
87
|
-
const devServer = evolveOptions.devServer;
|
88
|
-
const defaultGlobalData = devServer?.defaultServeGlobalData
|
89
|
-
? await devServer.defaultServeGlobalData(currEntryItem, devHostUri)
|
90
|
-
: {};
|
91
|
-
const configData = {
|
92
|
-
mode: 'development',
|
93
|
-
// FIXME: always use `devHostUri` as served local `cdn`, if you want to serve `anther` module
|
94
|
-
// you need to generate cdn path manually.
|
95
|
-
envCdn: urlJoin(devHostUri, ['public']),
|
96
|
-
};
|
97
|
-
const templateData = {
|
98
|
-
// title
|
99
|
-
title: getHtmlPluginConfig('title', configData, currEntryOption?.title),
|
100
|
-
// favicon
|
101
|
-
favicon: getHtmlPluginConfig('favicon', configData, currEntryOption?.favicon),
|
102
|
-
// `allowPx2rem` default is true
|
103
|
-
viewport: allowPx2remForModule([currEntry, currEntryItem], evolveOptions)
|
104
|
-
? getHtmlPluginConfig('viewport', configData, currEntryOption?.viewport)
|
105
|
-
: '',
|
106
|
-
// The customized html tags should be inject to <header />
|
107
|
-
headBeforeHtmlTags: getHtmlPluginConfig('headBeforeHtmlTags', configData, currEntryOption?.headBeforeHtmlTags),
|
108
|
-
// Allow us customized inline scripts into compiled html template.
|
109
|
-
inlineScripts: getHtmlPluginConfig('inlineScripts', configData, currEntryOption?.inlineScripts),
|
110
|
-
// The ordered styles will be injected start of html head.
|
111
|
-
headBeforeStyles: getHtmlPluginConfig('headBeforeStyles', configData, currEntryOption?.headBeforeStyles),
|
112
|
-
// The ordered scripts will be injected before html head.
|
113
|
-
headBeforeScripts: getHtmlPluginConfig('headBeforeScripts', configData, currEntryOption?.headBeforeScripts),
|
114
|
-
// The ordered scripts will be injected end of html body.
|
115
|
-
bodyAfterScripts: getHtmlPluginConfig('bodyAfterScripts', configData, currEntryOption?.bodyAfterScripts),
|
116
|
-
// Module Federation, Only for `static` mode, `serve` mode it will use entryItemConfig.endpoint()
|
117
|
-
moduleFederationScripts: injectFederationScripts({
|
118
|
-
me: [urlJoin(devHostUri, ['public'])],
|
119
|
-
}, evolveOptions.multiHtmlCdnEnvResolver),
|
120
|
-
// The global data.
|
121
|
-
global: {
|
122
|
-
hostUrl: devHostUri,
|
123
|
-
apiBase: urlJoin(devHostUri, [apiContext]),
|
124
|
-
virtualPath: join(`/pages`, projectVirtualPath),
|
125
|
-
moduleName: currEntry.replace(projectVirtualPath, '').replace(/^\//, ''),
|
126
|
-
...defaultGlobalData,
|
127
|
-
...(currEntryOption?.serveGlobalData || {}),
|
128
|
-
},
|
129
|
-
styles: [
|
130
|
-
urlJoin(devServerHostUri, [
|
131
|
-
join('public', normalizedCurrEntry, 'bundle.css'),
|
132
|
-
]),
|
133
|
-
],
|
134
|
-
scripts: [
|
135
|
-
urlJoin(devServerHostUri, [
|
136
|
-
join('public', normalizedCurrEntry, 'bundle.js'),
|
137
|
-
]),
|
138
|
-
],
|
139
|
-
};
|
140
|
-
return _.template(templateStr)(templateData);
|
141
|
-
};
|
142
|
-
/**
|
143
|
-
* A middleware to proxy the page modules template.
|
144
|
-
* @example `http://dev.flatjs.com:3001/pages`
|
145
|
-
* @param mode The mode of this dev server instance.
|
146
|
-
* @param hostUri The main host base url.
|
147
|
-
* @param apiContext apiBase e.g. `api`
|
148
|
-
* @param servedDevServerEntries The served webpack entries
|
149
|
-
* @param forPageMiddlewares Allow us provider customized middlewares for `page`, `modules`
|
150
|
-
* @param evolveOptions The evolve config options
|
151
|
-
*/
|
152
|
-
export const createPageMiddleware = (devHostUri, apiContext, servedDevServerEntries, evolveOptions) => {
|
153
|
-
const handler = async (req, res) => {
|
154
|
-
let html;
|
155
|
-
if (req.path === '/') {
|
156
|
-
html = await getPageMainHtml(servedDevServerEntries, devHostUri, evolveOptions);
|
157
|
-
}
|
158
|
-
else {
|
159
|
-
html = await getPageModuleHtml(servedDevServerEntries, req, devHostUri, apiContext, evolveOptions);
|
160
|
-
}
|
161
|
-
res.send(html);
|
162
|
-
};
|
163
|
-
return (evolveOptions.devServer?.middlewares || []).concat(handler);
|
164
|
-
};
|
1
|
+
import{existsSync,readFileSync}from"node:fs";import{isAbsolute,join}from"node:path";import{ensureSlash,urlJoin}from"@flatjs/common";import _ from"lodash";import{allowPx2remForModule}from"../../helpers/allow-px2rem-for-module.js";import{getHtmlPluginConfig}from"../../helpers/get-html-plugin-config.js";import{getPackageDir}from"../../helpers/get-pacakge-dir.js";import{normalizeEvolveEntryName}from"../../helpers/normalize-entry-map.js";import{injectFederationScripts}from"../../helpers/script-injects.js";const getPageMainHtml=async(e,t,l)=>{const r=getPackageDir(),o=readFileSync(join(r,"./templates/main.html"),"utf-8"),a=[],i=l.projectVirtualPath.replace(/^\//,"");for(const[r,o]of Object.entries(l.entryMap)){const l=o.options?.servePageMainLinkFn||(e=>e),n=Object.keys(e).includes(r),s=normalizeEvolveEntryName(r,i),m=urlJoin(t,["pages",s],{env:"me"});a.push({name:r.replace(i,"").replace(/^\//,""),link:l(m,{hostUri:t,entryName:r,virtualPath:i}),flagText:n?"serve":"static",isServed:n?1:0})}const n={title:"@flatjs/evolve",modules:a.sort(((e,t)=>t.isServed-e.isServed))};return _.template(o)(n)},getPageModuleHtml=async(e,t,l,r,o)=>{const{entryMap:a,projectVirtualPath:i}=o,n=Object.keys(a).sort(((e,t)=>t.length-e.length)),s=getPackageDir(),m=n.find((e=>{const l=normalizeEvolveEntryName(e,i);return ensureSlash(t.path.replace(/^\//,""),!0).startsWith(ensureSlash(l,!0))}));if(!m){const e=readFileSync(join(s,"./templates/module-404.html"),"utf-8");return _.template(e)({title:"404 Not Found",errorMeta:[{name:"@flatjs/evolve workspace",value:s},{name:"served entry names",value:JSON.stringify(n)},{name:"module path",value:`${t.path}`}]})}const p=normalizeEvolveEntryName(m,i),c=a[m],u=c.options,d=e[m],g=d?.devServerHostUri||l,f=u?.serveModuleTemplate||"./templates/module.html",v=join(o.projectCwd,"./templates/module.html"),h=readFileSync(isAbsolute(f)?f:existsSync(v)?v:join(s,"./templates/module.html"),"utf-8"),S=o.devServer,y=S?.defaultServeGlobalData?await S.defaultServeGlobalData(c,l):{},j={mode:"development",envCdn:urlJoin(l,["public"])},P={title:getHtmlPluginConfig("title",j,u?.title),favicon:getHtmlPluginConfig("favicon",j,u?.favicon),viewport:allowPx2remForModule([m,c],o)?getHtmlPluginConfig("viewport",j,u?.viewport):"",headBeforeHtmlTags:getHtmlPluginConfig("headBeforeHtmlTags",j,u?.headBeforeHtmlTags),inlineScripts:getHtmlPluginConfig("inlineScripts",j,u?.inlineScripts),headBeforeStyles:getHtmlPluginConfig("headBeforeStyles",j,u?.headBeforeStyles),headBeforeScripts:getHtmlPluginConfig("headBeforeScripts",j,u?.headBeforeScripts),bodyAfterScripts:getHtmlPluginConfig("bodyAfterScripts",j,u?.bodyAfterScripts),moduleFederationScripts:injectFederationScripts({me:[urlJoin(l,["public"])]},o.multiHtmlCdnEnvResolver),global:{hostUrl:l,apiBase:urlJoin(l,[r]),virtualPath:join("/pages",i),moduleName:m.replace(i,"").replace(/^\//,""),...y,...u?.serveGlobalData||{}},styles:[urlJoin(g,[join("public",p,"bundle.css")])],scripts:[urlJoin(g,[join("public",p,"bundle.js")])]};return _.template(h)(P)};export const createPageMiddleware=(e,t,l,r)=>(r.devServer?.middlewares||[]).concat((async(o,a)=>{let i;i="/"===o.path?await getPageMainHtml(l,e,r):await getPageModuleHtml(l,o,e,t,r),a.send(i)}));
|
@@ -1,25 +1 @@
|
|
1
|
-
import
|
2
|
-
import { fileWalk } from '@armit/file-utility';
|
3
|
-
export const createPublicAssetsMiddleware = (projectCwd) => async (req, res) => {
|
4
|
-
const baseUrl = req.baseUrl;
|
5
|
-
// exclude `/public` leave it fallback into webpack hot server
|
6
|
-
if (!baseUrl.startsWith('/public')) {
|
7
|
-
res.redirect('/pages');
|
8
|
-
}
|
9
|
-
else {
|
10
|
-
const publicFiles = await fileWalk(join('public/', '**/*.{js,css}'), {
|
11
|
-
cwd: projectCwd,
|
12
|
-
});
|
13
|
-
const extension = extname(baseUrl);
|
14
|
-
const matchedBundleFile = publicFiles.find((file) => {
|
15
|
-
return (extname(file) === extension &&
|
16
|
-
file.indexOf(baseUrl.replace(/\.(?:js|css)$/, '')) !== -1);
|
17
|
-
});
|
18
|
-
if (matchedBundleFile) {
|
19
|
-
res.sendFile(matchedBundleFile);
|
20
|
-
}
|
21
|
-
else {
|
22
|
-
res.sendFile(join(projectCwd, baseUrl));
|
23
|
-
}
|
24
|
-
}
|
25
|
-
};
|
1
|
+
import{extname,join}from"node:path";import{fileWalk}from"@armit/file-utility";export const createPublicAssetsMiddleware=e=>async(i,s)=>{const t=i.baseUrl;if(t.startsWith("/public")){const i=await fileWalk(join("public/","**/*.{js,css}"),{cwd:e}),a=extname(t),l=i.find((e=>extname(e)===a&&-1!==e.indexOf(t.replace(/\.(?:js|css)$/,""))));l?s.sendFile(l):s.sendFile(join(e,t))}else s.redirect("/pages")};
|
@@ -1,2 +1 @@
|
|
1
|
-
export
|
2
|
-
export * from './create-public-assets-middleware.js';
|
1
|
+
export*from"./create-page-middleware.js";export*from"./create-public-assets-middleware.js";
|
@@ -1,10 +1 @@
|
|
1
|
-
export class EvolveBuildError extends Error
|
2
|
-
constructor(code, messages) {
|
3
|
-
let message = code;
|
4
|
-
if (messages) {
|
5
|
-
message += ': ' + JSON.stringify(messages);
|
6
|
-
}
|
7
|
-
super(message);
|
8
|
-
this.code = code;
|
9
|
-
}
|
10
|
-
}
|
1
|
+
export class EvolveBuildError extends Error{constructor(r,e){let o=r;e&&(o+=": "+JSON.stringify(e)),super(o),this.code=r}}
|
@@ -1,6 +1 @@
|
|
1
|
-
export const allowPx2remForModule
|
2
|
-
// Global settings for `AllowPx2Rem`
|
3
|
-
const globalAllowPx2Rem = evolveOptions?.loaderOptions?.pixelOptions;
|
4
|
-
const currItemPx2Rem = (entryItem && entryItem[1]?.options?.allowPx2rem) ?? globalAllowPx2Rem;
|
5
|
-
return !!currItemPx2Rem;
|
6
|
-
};
|
1
|
+
export const allowPx2remForModule=(o,e)=>{const l=e?.loaderOptions?.pixelOptions;return!!((o&&o[1]?.options?.allowPx2rem)??l)};
|
@@ -1,23 +1 @@
|
|
1
|
-
import
|
2
|
-
/**
|
3
|
-
* Only fetch single one entry map once `serve`,`build` recycle.
|
4
|
-
* @returns
|
5
|
-
*/
|
6
|
-
export const assertOnlySingleEntryItem = (entryMap, evolveOptions) => {
|
7
|
-
if (Object.keys(entryMap).length > 1) {
|
8
|
-
throw new Error('Only single one entry map support right now for `serve`, `build`!');
|
9
|
-
}
|
10
|
-
let result = undefined;
|
11
|
-
for (const [entryChunkName, entryItem] of Object.entries(entryMap)) {
|
12
|
-
result = [entryChunkName, entryItem];
|
13
|
-
break;
|
14
|
-
}
|
15
|
-
if (!result) {
|
16
|
-
throw new Error(`No entry map found while "serve", "build" process!`);
|
17
|
-
}
|
18
|
-
const [entryName, entryConfig] = result;
|
19
|
-
// Make sure that we have correct `virtualPath` for each webpack `entry`
|
20
|
-
const normalizedEntryName = normalizeEvolveEntryName(entryName, evolveOptions.projectVirtualPath);
|
21
|
-
`entry`;
|
22
|
-
return [normalizedEntryName, entryConfig];
|
23
|
-
};
|
1
|
+
import{normalizeEvolveEntryName}from"./normalize-entry-map.js";export const assertOnlySingleEntryItem=(e,r)=>{if(Object.keys(e).length>1)throw new Error("Only single one entry map support right now for `serve`, `build`!");let t;for(const[r,o]of Object.entries(e)){t=[r,o];break}if(!t)throw new Error('No entry map found while "serve", "build" process!');const[o,n]=t;return[normalizeEvolveEntryName(o,r.projectVirtualPath),n]};
|
@@ -1,21 +1 @@
|
|
1
|
-
import
|
2
|
-
/**
|
3
|
-
* Split entryMap into multi entryMap with a `size`
|
4
|
-
* @param entryMap
|
5
|
-
* @param size
|
6
|
-
*/
|
7
|
-
export const chunkEntryMap = (entryMap, size = 2) => {
|
8
|
-
const keys = Object.keys(entryMap);
|
9
|
-
const entryKeyChunks = arrayChunk(keys, size);
|
10
|
-
const finalEntryMaps = [];
|
11
|
-
for (const keys of entryKeyChunks) {
|
12
|
-
const chunkMap = keys.reduce((prev, curr) => {
|
13
|
-
return {
|
14
|
-
...prev,
|
15
|
-
[curr]: entryMap[curr],
|
16
|
-
};
|
17
|
-
}, {});
|
18
|
-
finalEntryMaps.push(chunkMap);
|
19
|
-
}
|
20
|
-
return finalEntryMaps;
|
21
|
-
};
|
1
|
+
import{arrayChunk}from"@flatjs/common";export const chunkEntryMap=(r,o=2)=>{const n=Object.keys(r),t=arrayChunk(n,o),c=[];for(const o of t){const n=o.reduce(((o,n)=>({...o,[n]:r[n]})),{});c.push(n)}return c};
|
@@ -1,6 +1 @@
|
|
1
|
-
export const enableBundleHashNameForModule
|
2
|
-
// Global settings for `enableBundleHashName`
|
3
|
-
const globalEnabledStatus = evolveOptions.webpack?.enableBundleHashName;
|
4
|
-
const bundleHashNameEnabled = entryItemOption?.enableBundleHashName ?? globalEnabledStatus;
|
5
|
-
return !!bundleHashNameEnabled;
|
6
|
-
};
|
1
|
+
export const enableBundleHashNameForModule=(e,a)=>{const n=e.webpack?.enableBundleHashName;return!!(a?.enableBundleHashName??n)};
|
@@ -1,41 +1 @@
|
|
1
|
-
import
|
2
|
-
import { resolveEntryMapInputFiles } from './resolve-entry-map-input-files.js';
|
3
|
-
/**
|
4
|
-
* Filter to find actived entry input by entry name filter.
|
5
|
-
* @param definedEntries
|
6
|
-
* @param modules `home;mine;`
|
7
|
-
* @returns activedEntries
|
8
|
-
*/
|
9
|
-
export const filterActivedEntriesByModule = (definedEntries, modules) => {
|
10
|
-
const patterns = normalizeSemicolonFilterParts(modules);
|
11
|
-
const newActivedEntries = {};
|
12
|
-
for (const [entryKey, itemConfig] of Object.entries(definedEntries)) {
|
13
|
-
const matched = patterns.find((m) => {
|
14
|
-
const testRegExp = typeof m === 'string' ? new RegExp(`${m}`) : m;
|
15
|
-
return testRegExp.test(entryKey);
|
16
|
-
});
|
17
|
-
if (matched) {
|
18
|
-
newActivedEntries[entryKey] = itemConfig;
|
19
|
-
}
|
20
|
-
}
|
21
|
-
return newActivedEntries;
|
22
|
-
};
|
23
|
-
/**
|
24
|
-
* Filter to find actived entry input by absolute entry filepath
|
25
|
-
* @param projectCwd
|
26
|
-
* @param definedEntries
|
27
|
-
* @param entryInputs [`/xxxx/x/xxxx/src/home/index.tsx`]
|
28
|
-
* @returns activedEntries
|
29
|
-
*/
|
30
|
-
export const filterActivedEntriesByEntryInputs = async (projectCwd, definedEntries, entryInputs) => {
|
31
|
-
const newActivedEntries = {};
|
32
|
-
for (const [entryKey, itemConfig] of Object.entries(definedEntries)) {
|
33
|
-
const entryAbsFiles = await resolveEntryMapInputFiles(projectCwd, {
|
34
|
-
[entryKey]: itemConfig,
|
35
|
-
});
|
36
|
-
if (arraysIntersect(entryAbsFiles, entryInputs)) {
|
37
|
-
newActivedEntries[entryKey] = itemConfig;
|
38
|
-
}
|
39
|
-
}
|
40
|
-
return newActivedEntries;
|
41
|
-
};
|
1
|
+
import{arraysIntersect,normalizeSemicolonFilterParts}from"@flatjs/common";import{resolveEntryMapInputFiles}from"./resolve-entry-map-input-files.js";export const filterActivedEntriesByModule=(t,e)=>{const r=normalizeSemicolonFilterParts(e),n={};for(const[e,o]of Object.entries(t)){r.find((t=>("string"==typeof t?new RegExp(`${t}`):t).test(e)))&&(n[e]=o)}return n};export const filterActivedEntriesByEntryInputs=async(t,e,r)=>{const n={};for(const[o,s]of Object.entries(e)){const e=await resolveEntryMapInputFiles(t,{[o]:s});arraysIntersect(e,r)&&(n[o]=s)}return n};
|
@@ -1,23 +1 @@
|
|
1
|
-
|
2
|
-
* Get current timestramp as `string`
|
3
|
-
*/
|
4
|
-
export const currNow = () => Date.now().toString();
|
5
|
-
/**
|
6
|
-
* Generate bundle file name from rules
|
7
|
-
* 1. if `serveMode`, always return `bundle
|
8
|
-
* 2. else if `enableBundleHashName` always return `bundle[contenthash].{css,js}`
|
9
|
-
* 3. otherwise return `bundle.{css,js}?${currNow}`
|
10
|
-
* @param type `js` | `css`
|
11
|
-
* @param serveMode If we are run `serve` mode
|
12
|
-
* @param enableBundleHashName If we need to generate bundle file name with `[contenthash]`
|
13
|
-
*/
|
14
|
-
export const getBundleFileName = (type, serveMode, enableBundleHashName = true) => {
|
15
|
-
const fileEndFix = type === 'js' ? '.js' : '.css';
|
16
|
-
if (serveMode) {
|
17
|
-
return `bundle${fileEndFix}`;
|
18
|
-
}
|
19
|
-
if (enableBundleHashName) {
|
20
|
-
return `bundle[contenthash]${fileEndFix}`;
|
21
|
-
}
|
22
|
-
return `bundle${fileEndFix}?${currNow()}`;
|
23
|
-
};
|
1
|
+
export const currNow=()=>Date.now().toString();export const getBundleFileName=(t,n,e=!0)=>{const o="js"===t?".js":".css";return n?`bundle${o}`:e?`bundle[contenthash]${o}`:`bundle${o}?${Date.now().toString()}`};
|