UNPKG

mooncake-cli

Version:
118 lines (103 loc) 2.91 kB
const path = require('path') const fs = require('fs') const cwd = process.cwd() const pagePath = path.join(cwd, 'src/pages') const resolvePath = function(subPath) { return path.resolve(cwd, subPath) } function getFiles(path) { let allFileList = [] getAllFile(path) function getAllFile(path) { let files = [] if (fs.existsSync(path)) { files = fs.readdirSync(path) files.forEach(file => { const curPath = path + '/' + file if (fs.statSync(curPath).isDirectory()) { getAllFile(curPath) } else { if (file === 'index.js') { const pageName = path.split('/').pop() const conf = path + '/conf.json' allFileList.push([pageName, curPath, conf]) //pagename entry conf } } }) } } return allFileList } const getDevEntry = (entryPath) => { const fileList = getFiles(entryPath) const hotScript = path.join(__dirname, '../../node_modules/webpack-hot-middleware/client?reload=true') const entry = {} fileList.forEach((item) => { entry[item[0]] = [item[1], hotScript] }) return entry } const getBuildEntry = (entryPath) => { const fileList = getFiles(entryPath) const entry = {} fileList.forEach((item) => { entry[item[0]] = item[1] }) return entry } const htmlTemplate = (conf) => { const {title, css, js} = conf const links = css.map(function(href) { return `<link href="${href}" rel="stylesheet">` }).join('') const scripts = js.map(function(src) { return `<script src="${src}"></script>` }).join('') return ` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>${title}</title> ${links} <link href="//cdn.bootcss.com/normalize/8.0.0/normalize.min.css" rel="stylesheet"> <link rel="shortcut icon" href="//cdn.myweimai.com/images/f2b5baf03e211895a9870d2769efbef6_16x16.ico"> <meta name="format-detection" content="email=no,address=no,telephone=no"> <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script> </head> <body> <div id="container"></div> <script src="//m.myweimai.com/common_js/react16_2_0.js"></script> <script src="//m.myweimai.com/common_js/react_dom16_2_0.js"></script> ${scripts} </body> </html> ` } const getPages = (path) => { const fileList = getFiles(path) const multiplePages = [] function pageObj(item) { const conf = JSON.parse(fs.readFileSync(item[2])) return { templateContent: htmlTemplate(conf), filename: `${item[0]}.html`, chunks: [item[0], 'common'], minify: { removeComments: true, collapseWhitespace: true } } } fileList.forEach((item) => { multiplePages.push(pageObj(item)) }) return multiplePages } module.exports = { resolvePath, getDevEntry, getBuildEntry, getPages, pagePath }