@aniyajs/rotor
Version:
基于webpack5开发的一款专注于打包、运行的工具
148 lines (122 loc) • 5.13 kB
JavaScript
;
const path = require("path");
const fs = require("fs-extra");
const getPublicUrlOrPath = require("./getPublicUrlOrPath");
const { reviveFunctions } = require("./common");
const isEnvDevelopment = process.env.NODE_ENV === "development";
const isEnvProduction = process.env.NODE_ENV === "production";
const appDirectory = process.cwd();
const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath);
const appPackageJson = resolveApp("package.json");
const appTsConfig = resolveApp("tsconfig.json");
const useTypeScript = fs.existsSync(appTsConfig);
/**
* @type { Partial<{appConfigTempIndexJs: string; appEnvConfigTemp: string }> }
*/
let tempsPath = {};
// 入口文件后缀
const moduleFileExtensions = [".ts", ".js", ".tsx", ".jsx"];
let build = "build";
let publicUrlOrPath = "/";
const resolveModule = (resolveFn, filePath) => {
const extension = moduleFileExtensions.find((extension) =>
fs.existsSync(resolveFn(`${filePath}${extension}`)),
);
if (extension) {
return resolveFn(`${filePath}${extension}`);
}
return resolveFn(`${filePath}.${useTypeScript ? "ts" : "js"}`);
};
const appTempPath =
(isEnvDevelopment && resolveApp("src/.aniya")) ||
(isEnvProduction && resolveApp("src/.aniya-production")) ||
resolveApp("src/.aniya");
const appTempRouterIndexJs =
(isEnvDevelopment &&
resolveModule(resolveApp, "src/.aniya/plugin-router/index")) ||
(isEnvProduction &&
resolveModule(resolveApp, "src/.aniya-production/plugin-router/index")) ||
resolveModule(resolveApp, "src/.aniya/plugin-router/index");
const appTempMetaJs =
(isEnvDevelopment && resolveApp("src/.aniya/meta.json")) ||
(isEnvProduction && resolveApp("src/.aniya-production/meta.json")) ||
resolveApp("src/.aniya/meta.json");
const appConfigTempPath =
(isEnvDevelopment && resolveApp("src/.aniya/config")) ||
(isEnvProduction && resolveApp("src/.aniya-production/config")) ||
resolveApp("src/.aniya/config");
const appEnvConfigTempPath =
(isEnvDevelopment && resolveApp("src/.aniya/env")) ||
(isEnvProduction && resolveApp("src/.aniya-production/env")) ||
resolveApp("src/.aniya/env");
const appWebpackCache =
(isEnvDevelopment && resolveApp("src/.aniya/.cache")) ||
(isEnvProduction && resolveApp("src/.aniya-production/.cache")) ||
resolveApp("src/.aniya/.cache");
const appTempCachePath =
(isEnvDevelopment && resolveApp("src/.aniya/temp")) ||
(isEnvProduction && resolveApp("src/.aniya-production/temp")) ||
resolveApp("src/.aniya/temp");
const appWebpackCacheBabelLoader =
(isEnvDevelopment && resolveApp("src/.aniya/.cache/babel-loader")) ||
(isEnvProduction &&
resolveApp("src/.aniya-production/.cache/babel-loader")) ||
resolveApp("src/.aniya/.cache/babel-loader");
const appTsBuildInfoFile =
(isEnvDevelopment && resolveApp("src/.aniya/.cache/tsconfig.tsbuildinfo")) ||
(isEnvProduction &&
resolveApp("src/.aniya-production/.cache/tsconfig.tsbuildinfo")) ||
resolveApp("src/.aniya/.cache/tsconfig.tsbuildinfo");
const appEslintCacheFile =
(isEnvDevelopment && resolveApp("src/.aniya/.cache/.eslintcache")) ||
(isEnvProduction &&
resolveApp("src/.aniya-production/.cache/.eslintcache")) ||
resolveApp("src/.aniya/.cache/.eslintcache");
const appModifyConfigCacheFile =
(isEnvDevelopment && resolveApp("src/.aniya/.cache/modify-config.json")) ||
(isEnvProduction &&
resolveApp("src/.aniya-production/.cache/modify-config.json")) ||
resolveApp("src/.aniya/.cache/modify-config.json");
if (fs.existsSync(appTempMetaJs)) {
const tempMetaData = fs.readJSONSync(appTempMetaJs);
tempsPath = (tempMetaData.paths ? tempMetaData.paths : []);
const publicPath = tempMetaData?.lastConfig?.publicPath ?? '/';
const outputPath = tempMetaData?.lastConfig?.outputPath ?? 'build';
publicUrlOrPath = getPublicUrlOrPath(isEnvDevelopment, publicPath);
build = outputPath.startsWith("/")
? outputPath.slice(1)
: outputPath;
}
module.exports = {
appPath: resolveApp("."),
appIndexJs: resolveModule(resolveApp, "src/index"),
appHtml: resolveApp("src/pages/document.ejs"),
appConfigJs: resolveModule(resolveApp, `config/config`),
appPublic: resolveApp("public"),
appSrc: resolveApp("src"),
appBuild: resolveApp(build),
appTsConfig,
appJsConfig: resolveApp("jsconfig.json"),
appTempPath,
appTempCachePath,
appTempRouterIndexJs,
appConfigPath: resolveApp("config"),
appMockPath: resolveApp("mock"),
appTempMetaJs,
appConfigTempPath,
appMockTempPath: resolveApp("src/.aniya/mock"),
appMockTempIndexJs: resolveApp("src/.aniya/mock/index.js"),
publicUrlOrPath,
appPackageJson,
yarnLockFile: resolveApp("yarn.lock"),
appNodeModules: resolveApp("node_modules"),
appModelsPath: resolveApp("models"),
appPagesPath: resolveApp("src/pages"),
appWebpackCache,
appTsBuildInfoFile,
appWebpackCacheBabelLoader,
appEslintCacheFile,
appModifyConfigCacheFile,
appEnvConfigTempPath,
...tempsPath,
};