UNPKG

hapimini-cli

Version:
207 lines 6.96 kB
const path = require("path") const fs = require('fs'); const join = path.join; const srcPath = "./src" const NODE_ENV = process.env.NODE_ENV; const destPath = NODE_ENV === "development" ? "./dev" : "./dist" function findSync(startPath) { let entries = {}; function finder(path) { let files = fs.readdirSync(path); files.forEach((val, index) => { let fPath = join(path, val); let stats = fs.statSync(fPath); if (stats.isDirectory()) finder(fPath); if (stats.isFile() && /\S+.js$/.test(val)) { const key = fPath.replace(/(^src\/([0-9a-zA-Z_\/]+)\/\S+.js$)/, "$2") entries[key] = fPath.replace(/\w+\.js$/, "*.js") } }); } finder(startPath); return entries } function prodCompileFilter() { let entries = findSync('./src/pages'); let a_componentsEntries = [] let j_componentsEntries = [] let l_componentsEntries = [] for (const item in entries) { const jsonPath = `${entries[item]}`.replace(/\*.js$/, "index.json") const json = JSON.parse(fs.readFileSync(jsonPath, { encoding: 'utf-8' })); const usingComponents = json.usingComponents || {}; const result = entryFilesIterator(usingComponents) entries = { ...entries, ...result.entries } a_componentsEntries = a_componentsEntries.concat(result.a) j_componentsEntries = j_componentsEntries.concat(result.j) l_componentsEntries = l_componentsEntries.concat(result.l) } let jsDirs = [{ src: "./src/app.js", dest: "./dist" }, { src: "./src/components/api/**/*.js", dest: "./dist/components/api", }, { src: "./src/components/_constants/*.js", dest: "./dist/components/_constants" }, { src: "./src/components/utils/**/*.js", dest: "./dist/components/utils" }] for (const key in entries) { jsDirs.push({ src: entries[key], dest: `./dist/${key}` }) } return { jsDirs, jsonDirs: [ { src: path.resolve(srcPath, "app.json"), dest: destPath, }, { src: path.resolve(srcPath, "pages/**/*.json"), dest: path.join(destPath, "pages"), } ].concat(j_componentsEntries), axmlDirs: [ { src: path.resolve(srcPath, "pages/**/*.axml"), dest: path.join(destPath, "pages"), } ].concat(a_componentsEntries), lessDirs: [ { src: path.resolve(srcPath, "app.less"), dest: destPath, }, { src: path.resolve(srcPath, "pages/**/*.less"), dest: path.join(destPath, "pages"), }, { src: path.resolve(srcPath, "assets/styles/**/*.less"), dest: path.join(destPath, "assets"), } ].concat(l_componentsEntries) } } function entryFilesIterator(usingComponents) { let entries = {}, a = [], j = [], l = [] for (const ite in usingComponents) { const name = usingComponents[ite].replace(/^\//, "") const _name = name.replace(/index$/, ""); let root = `.` const jsonPath = `${root}/src/${name}.json` const json = JSON.parse(fs.readFileSync(jsonPath, { encoding: 'utf-8' })); const comps = json.usingComponents; if(comps && Object.keys(comps).length) { const result = entryFilesIterator(comps) entries = { ...entries, ...result.entries } a = a.concat(result.a) j = j.concat(result.j) l = l.concat(result.l) } entries[`components/${ite}`] = `${root}/src/${name}.js` a.push({ src: isLib ? `${root}/dist/${name}.axml` : `${root}/src/${name}.axml`, dest: path.join(destPath, _name) }) j.push({ src: isLib ? `${root}/dist/${name}.json` : `${root}/src/${name}.json`, dest: path.join(destPath, _name) }) l.push({ src: isLib ? `${root}/dist/${name}.acss` : `${root}/src/${name}.less`, dest: path.join(destPath, _name) }) } return { entries, a, j, l } } const prodConfig = prodCompileFilter() module.exports = { common: { srcPath: srcPath, destPath: destPath, imageSrc: "./src/assets/static/**/*.*", imageDest: `${destPath}/assets/static`, dev: { jsonDirs: [ { src: path.resolve(srcPath, "{app,ext}.json"), dest: destPath, }, { src: path.resolve(srcPath, "pages/**/*.json"), dest: path.join(destPath, "pages"), }, { src: path.resolve(srcPath, "components/**/*.json"), dest: path.join(destPath, "components"), } ], axmlDirs: [ { src: path.resolve(srcPath, "pages/**/*.axml"), dest: path.join(destPath, "pages"), }, { src: path.resolve(srcPath, "components/**/*.axml"), dest: path.join(destPath, "components"), }, ], lessDirs: [ { src: path.resolve(srcPath, "app.less"), dest: destPath, }, { src: path.resolve(srcPath, "pages/**/*.less"), dest: path.join(destPath, "pages"), }, { src: path.resolve(srcPath, "components/**/*.less"), dest: path.join(destPath, "components"), }, { src: path.resolve(srcPath, "assets/styles/**/*.less"), dest: path.join(destPath, "assets"), } ], jsDirs: [ { src: path.resolve(srcPath, "app.js"), dest: destPath }, { src: path.resolve(srcPath, "pages/**/*.js"), dest: path.join(destPath, "pages"), }, { src: path.resolve(srcPath, "components/**/*.js"), dest: path.join(destPath, "components") } ] }, prod: { jsonDirs: prodConfig.jsonDirs, axmlDirs: prodConfig.axmlDirs, lessDirs: prodConfig.lessDirs, jsDirs: prodConfig.jsDirs } } }