UNPKG

2.18 kBJavaScriptView Raw
1const fs = require('fs')
2const getPathnameProjectConfigFile = require('./get-pathname-project-config-file')
3// const readBuildConfigFile = require('../utils/read-build-config-file')
4const getAppTypeString = require('./get-app-type-string')
5
6const extractType = () => {
7 const pathnameKootJS = getPathnameProjectConfigFile()
8
9 try {
10 const { type } = require(pathnameKootJS)
11 return type
12 } catch (e) { }
13
14 const content = fs.readFileSync(pathnameKootJS, 'utf-8')
15 const matches = /type[ ]*=[ ]*['"](.+?)['"]/gm.exec(content)
16 if (Array.isArray(matches) && matches.length > 1)
17 return matches[1]
18
19 return undefined
20}
21
22/**
23 * 根据 KOOT_PROJECT_TYPE 环境变量确定项目类型 (type),并修改/写入以下环境变量
24 * - WEBPACK_BUILD_TYPE: 'isomorphic' || 'spa' || etc...
25 * - KOOT_PROJECT_TYPE: 'ReactApp' || 'ReactSPA' || etc...
26 *
27 * 如果该环境变量未指定或为空值,则会尝试从项目配置中读取
28 *
29 * 项目配置:在 0.6 之前为 koot.js,0.6 之后为自动生成的临时配置文件
30 * - 使用临时配置文件是为了兼容 0.6 之前的行为
31 * - TODO: 在未来可能会抛弃独立配置文件行为,界时该方法会改写
32 *
33 * @async
34 * @param {String} [projectType] 指定项目类型,如果指定会强制采用该值
35 * @returns {String} process.env.KOOT_PROJECT_TYPE
36 */
37module.exports = async (projectType = process.env.KOOT_PROJECT_TYPE) => {
38 if (!projectType) {
39 projectType = extractType() || ''
40 }
41
42 switch (getAppTypeString(projectType)) {
43 case 'ReactApp': {
44 // if ((await readBuildConfigFile()).server)
45 process.env.WEBPACK_BUILD_TYPE = 'isomorphic'
46 process.env.KOOT_PROJECT_TYPE = 'ReactApp'
47 // return 'ReactSPA'
48 break
49 }
50
51 case 'ReactSPA': {
52 process.env.WEBPACK_BUILD_TYPE = 'spa'
53 process.env.KOOT_PROJECT_TYPE = 'ReactSPA'
54 break
55 }
56
57 // default:
58 // return process.env.KOOT_PROJECT_TYPE
59 }
60
61 return process.env.KOOT_PROJECT_TYPE
62}