docs-sdk/docs-provider/src/scripts/configs/deps.ts (95 lines of code) (raw):
import * as path from "path";
import { BreezrPresetConfig } from "@alicloud/console-toolkit-preset-official";
import { getModifyPresetConfig } from "../../getModifyPresetConfig";
const outputPath = process.env.OUTPUT_PATH || "doc-dist";
const depsConsoleOSId = process.env.CONSOLEOS_ID + "-deps";
const externals = process.env.EXTERNALS
? JSON.parse(process.env.EXTERNALS)
: undefined;
const webpackConfigPath = process.env.WEBPACK_CONFIG_PATH;
const pkgRoot = path.resolve(__dirname, "../../../");
const presetOfficialConfigPath = process.env.PRESET_OFFICIAL_CONFIG_PATH;
if (!process.env.CONSOLEOS_ID) {
throw new Error(`must provide process.env.CONSOLEOS_ID to deps`);
}
export const config = ({
port,
isDev = true,
}: { port?: number; isDev?: boolean } = {}) => {
const modifyConfig = getModifyPresetConfig(presetOfficialConfigPath, {
type: "deps",
isDev,
});
const config: BreezrPresetConfig = {
disablePolyfill: true,
disableErrorOverlay: true,
typescript: {
// @ts-ignore
disableTypeChecker: true,
useBabel: true,
},
useTerserPlugin: true,
htmlFileName: path.resolve(pkgRoot, "src2/index.html"),
useHappyPack: false,
hashPrefix: depsConsoleOSId,
// output: {
// path: path.join(outputPath, "deps"),
// } as any,
port: port === undefined ? port : String(port),
noOpen: true as any,
webpack(config) {
config.output.path = path.resolve(process.cwd(), outputPath, "deps");
config.output.publicPath = "";
if (isDev) {
config.devServer.publicPath = "/deps/";
config.devServer.writeToDisk = true;
// 在组件开发场景下,deps中包含组件代码
// 因此当deps bundle重新编译以后,要刷新页面
config.devServer.liveReload = true;
config.devServer.inline = true;
config.devServer.hot = false;
// 让sockjs直接请求deps开发服务器
// 即使宿主开发服务器使用https,deps开发服务器依然要走http。
// 这里hostname必须为 127.0.0.1 ,才能避免继承宿主应用的https:
// https://github.com/webpack/webpack-dev-server/blob/699404b091541242ad3d5f38f1a0022a83ff09b2/client-src/default/utils/createSocketUrl.js#L68
// 使用场景:
// https://code.alibaba-inc.com/wind/rc-rd-tree/blob/b8f45ae274070bd525e2e9da209e114bb3dc3c38/config/breezr.docs.config.ts#L23
config.devServer.public = `http://127.0.0.1:${port}`;
}
config.entry = path.join(pkgRoot, "src2/BuildDeps/index.ts");
config.externals = {
react: {
root: "React",
commonjs2: "react",
commonjs: "react",
amd: "react",
},
"react-dom": {
root: "ReactDOM",
commonjs2: "react-dom",
commonjs: "react-dom",
amd: "react-dom",
},
};
let result = config;
if (webpackConfigPath) {
const c = require(webpackConfigPath);
result = c?.({ type: "deps", isDev, config }) || result;
}
return result;
},
disableUpdator: true,
};
return {
presets: [
[
require.resolve("@alicloud/console-toolkit-preset-official"),
modifyConfig(config),
],
],
plugins: [
[
"@alicloud/console-toolkit-plugin-os",
{
id: depsConsoleOSId,
disableCssPrefix: true,
},
],
[path.join(pkgRoot, "lib/config-webpack-plugin.js")],
[
path.join(pkgRoot, "lib/build-external-deps.js"),
{
externals,
},
],
],
};
};