UNPKG

@aniyajs/rotor

Version:

基于webpack5开发的一款专注于打包、运行的工具

139 lines (116 loc) 4.56 kB
"use strict"; const path = require("path"); const fs = require("fs-extra"); const getPublicUrlOrPath = require("./getPublicUrlOrPath"); const defaultConfig = require("../webpack/defaultConfig"); const isEnvDevelopment = process.env.NODE_ENV === "development"; const isEnvProduction = process.env.NODE_ENV === "production"; const appDirectory = path.normalize(process.cwd()); const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath); const appTsConfig = resolveApp("tsconfig.json"); const useTypeScript = fs.existsSync(appTsConfig); /** * @type { Partial<{appConfigTempIndexJs: string; appConfigIndexDirTempPath: 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/aniya-config")) || (isEnvProduction && resolveApp("src/.aniya-production/aniya-config")) || resolveApp("src/.aniya/aniya-config"); const appWebpackCache = (isEnvDevelopment && resolveApp("src/.aniya/.cache")) || (isEnvProduction && resolveApp("src/.aniya-production/.cache")) || resolveApp("src/.aniya/.cache"); 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"); if (fs.existsSync(appTempMetaJs)) { const tempMetaData = fs.readJSONSync(appTempMetaJs); tempsPath = tempMetaData.paths; if ( tempsPath && tempsPath.appConfigTempIndexJs && fs.existsSync(tempsPath.appConfigTempIndexJs) ) { // 清除缓存 delete require.cache[require.resolve(tempsPath.appConfigTempIndexJs)]; const latestCustomConfigContent = defaultConfig( tempsPath.appConfigTempIndexJs, ); publicUrlOrPath = getPublicUrlOrPath( isEnvDevelopment, latestCustomConfigContent.publicPath, ); build = latestCustomConfigContent.outputPath || "build"; } } module.exports = { appPath: resolveApp("."), appIndexJs: resolveModule(resolveApp, "src/index"), appHtml: resolveApp("src/pages/document.ejs"), appConfigJs: resolveApp(`config/config.${useTypeScript ? "ts" : "js"}`), appPublic: resolveApp("public"), appSrc: resolveApp("src"), appBuild: resolveApp(build), appTsConfig, appJsConfig: resolveApp("jsconfig.json"), appTempPath, appTempRouterIndexJs, appConfigPath: resolveApp("config"), appMockPath: resolveApp("mock"), appEslintPath: resolveApp(".eslintrc"), appTempMetaJs, appConfigTempPath, appMockTempPath: resolveApp("src/.aniya/aniya-mock"), appMockTempIndexJs: resolveApp("src/.aniya/aniya-mock/index.js"), publicUrlOrPath, appPackageJson: resolveApp("package.json"), yarnLockFile: resolveApp("yarn.lock"), appNodeModules: resolveApp("node_modules"), appModelsPath: resolveApp("models"), appPagesPath: resolveApp("src/pages"), appWebpackCache, appTsBuildInfoFile, appWebpackCacheBabelLoader, appEslintCacheFile, ...tempsPath, };