'use strict'; const path = require('path'); const fs = require('fs'); const subDirName = process.env.SUB_DIR_NAME || 'wechatMp'; const appDirectory = fs.realpathSync(process.cwd()); const resolveRoot = (relativePath) => path.resolve(appDirectory, relativePath); const resolveApp = (relativePath) => path.resolve(resolveRoot(subDirName), relativePath); const buildPath = process.env.BUILD_PATH || 'dist'; let moduleFileExtensions = [ 'mp.js', 'js', 'mp.ts', 'ts', ]; if (process.env.OAK_DEV_MODE === 'frontend') { moduleFileExtensions = [ 'frontend.js', 'frontend.ts', ].concat(moduleFileExtensions); } else { moduleFileExtensions = [ 'server.js', 'server.ts', ].concat(moduleFileExtensions); } const prodFileExtensions = ['prod.mp.js', 'prod.mp.ts', 'prod.js', 'prod.ts']; if ( process.env.NODE_ENV === 'production' ) { moduleFileExtensions = prodFileExtensions.concat(moduleFileExtensions); } else if (process.env.NODE_ENV === 'staging') { moduleFileExtensions = [ 'staging.mp.js', 'staging.mp.ts', 'staging.js', 'staging.ts', ] .concat(prodFileExtensions) .concat(moduleFileExtensions); } else { moduleFileExtensions = [ 'dev.mp.js', 'dev.mp.ts', 'dev.js', 'dev.ts', ].concat(moduleFileExtensions); } // Resolve file paths in the same order as webpack const resolveModule = (resolveFn, filePath) => { const extension = moduleFileExtensions.find(extension => fs.existsSync(resolveFn(`${filePath}.${extension}`)) ); if (extension) { return resolveFn(`${filePath}.${extension}`); } return resolveFn(`${filePath}.js`); }; // config after eject: we're in ./config/ module.exports = { dotenv: resolveApp('.env'), appPath: resolveApp('.'), appBuild: resolveApp(buildPath), appIndexDevJs: resolveModule(resolveApp, 'src/app.dev'), appIndexJs: resolveModule(resolveApp, 'src/app'), appPackageJson: resolveRoot('package.json'), appSrc: resolveApp('src'), appTsConfig: resolveRoot('tsconfig.mp.json'), appJsConfig: resolveRoot('jsconfig.json'), yarnLockFile: resolveRoot('yarn.lock'), appNodeModules: resolveRoot('node_modules'), appWebpackCache: resolveRoot('node_modules/.cache'), appTsBuildInfoFile: resolveRoot('node_modules/.cache/tsconfig.tsbuildinfo'), publicUrlOrPath: '/', appRootSrc: resolveRoot('src'), appRootPath: resolveRoot('.'), oakConfigJson: resolveApp('src/oak.config.json'), }; module.exports.moduleFileExtensions = moduleFileExtensions;