|
1 | | -const { copySync, removeSync, ensureDir } = require('fs-extra'); |
| 1 | +const { copySync, removeSync, ensureDirSync, outputFileSync, writeJsonSync } = require('fs-extra'); |
2 | 2 | const { join } = require('path'); |
3 | 3 |
|
4 | | -const { |
5 | | - main: customMain, |
6 | | - outputPath: customOutputPath, |
7 | | - projectName: customProjectName, |
8 | | -} = require('../config'); |
9 | | -const { getTemplate } = require('./utils'); |
| 4 | +const { getInitTemplate, getCommonTemplate, getPackageJson, getWebpackConfigJson } = require('./utils'); |
| 5 | + |
10 | 6 | const { setPackageProps, addReadMe } = require('../utils'); |
11 | 7 |
|
12 | | -const tempPath = join(__dirname, 'temp'); |
| 8 | +const { |
| 9 | + indexHtml: getIndexHtml, |
| 10 | + indexJs: getIndexJs, |
| 11 | + app: getApp, |
| 12 | +} = require('../template/vue2'); |
13 | 13 |
|
14 | | -const init = () => { |
15 | | - removeSync(customOutputPath); |
16 | | - removeSync(tempPath); |
17 | | - ensureDir(tempPath); |
| 14 | +const init = root => { |
| 15 | + removeSync(root); |
| 16 | + ensureDirSync(root); |
18 | 17 | }; |
19 | 18 |
|
20 | | -const process = () => { |
21 | | - copySync(getTemplate(customMain), tempPath); |
| 19 | +const process = config => { |
| 20 | + const { |
| 21 | + mainFramework: main, |
| 22 | + uiFramework: ui, |
| 23 | + projectName, |
| 24 | + $resolveRoot: root, |
| 25 | + templatePath, |
| 26 | + } = config; |
| 27 | + |
| 28 | + // main:react |
| 29 | + const resolveTemplatePath = join(root, templatePath); |
| 30 | + |
| 31 | + // todo remove this condition when vue/none framework done |
| 32 | + if (main === 'react') { |
| 33 | + // generate index.html |
| 34 | + const html = getIndexHtml({ projectName }); |
| 35 | + outputFileSync(join(resolveTemplatePath, html.file), html.text); |
| 36 | + |
| 37 | + // generate index.js/jsx |
| 38 | + const js = getIndexJs({ ui }); |
| 39 | + outputFileSync(join(resolveTemplatePath, js.file), js.text); |
| 40 | + |
| 41 | + // generate App.js/jsx |
| 42 | + const appObj = getApp({ ui }); |
| 43 | + outputFileSync(join(resolveTemplatePath, appObj.file), appObj.text); |
| 44 | + |
| 45 | + // copy common files |
| 46 | + copySync(getCommonTemplate(main), root); |
| 47 | + |
| 48 | + // generate package.json |
| 49 | + writeJsonSync(join(root, 'package.json'), getPackageJson({ ui, main }), { |
| 50 | + spaces: 2, |
| 51 | + }); |
22 | 52 |
|
23 | | - // change package.json name |
24 | | - setPackageProps(join(tempPath, 'package.json'), { |
25 | | - name: customProjectName, |
26 | | - }); |
| 53 | + // generate snowpack.config.json |
| 54 | + writeJsonSync( |
| 55 | + join(root, 'webpack.config.js'), |
| 56 | + getWebpackConfigJson({ ui }), |
| 57 | + { |
| 58 | + spaces: 2, |
| 59 | + }, |
| 60 | + ); |
| 61 | + } else { |
| 62 | + // main:vue/none |
| 63 | + copySync(getInitTemplate(main, ui), root); |
| 64 | + // copy common files |
| 65 | + copySync(getCommonTemplate(main), root); |
27 | 66 |
|
| 67 | + // change package.json name |
| 68 | + setPackageProps(join(root, 'package.json'), { |
| 69 | + name: projectName, |
| 70 | + }); |
| 71 | + } |
28 | 72 | // add overview info to readme.md |
29 | | - addReadMe(join(tempPath, 'README.md'), customProjectName); |
| 73 | + addReadMe(join(root, 'README.md'), projectName); |
30 | 74 | }; |
31 | 75 |
|
32 | | -const output = () => { |
33 | | - copySync(tempPath, customOutputPath); |
34 | | - removeSync(tempPath); |
| 76 | +module.exports = config => { |
| 77 | + init(config.$resolveRoot); |
| 78 | + process(config); |
35 | 79 | }; |
36 | 80 |
|
37 | | -init(); |
38 | | -process(); |
39 | | -output(); |
|
0 commit comments