rollupVueToHtml.mjs

import fs from 'fs'
import _ from 'lodash-es'
import w from './wsemip.umd.js'
import rollupFiles from './rollupFiles.mjs'


/**
 * 使用rollup編譯Vue檔案並產生瀏覽用的html檔
 *
 * @param {String} [src='./src/App.vue'] 輸入欲打包Vue檔案(*.vue)的位置字串,預設'./src/App.vue'
 * @param {String} [tar='./docs/examples/app.html'] 輸入輸出html的位置字串,並於該目錄下會出現打包後的js檔與map檔,預設'./docs/examples/app.html'
 * @param {Object} [opt={}] 輸入其他設定物件,預設{}
 * @param {String} [opt.htmlLang='zh-tw'] 輸入所產生html的lang字串,預設'zh-tw'
 * @param {String} [opt.title=''] 輸入標題字串,預設''
 * @param {String} [opt.head=''] 輸入head內額外html字串,預設''
 * @param {String} [opt.newVue=''] 輸入初始化(new Vue)內額外設定字串,預設''
 * @param {Array} [opt.globals={}] 輸入rollup不打包套件時內外部套件關聯性設定物件,預設{}
 * @param {Array} [opt.external=[]] 輸入rollup不打包套件清單陣列,預設[]
 */
async function rollupVueToHtml(src = './src/App.vue', tar = './docs/examples/app.html', opt = {}) {

    //param
    let vsrc = _.split(src, '/')
    let vtar = _.split(tar, '/')
    let fdSrc = _.join(_.dropRight(vsrc), '/') + '/'
    let fdTar = _.join(_.dropRight(vtar), '/') + '/'
    let srcName = _.last(vsrc) //'App.vue'
    let tarName = _.head(_.split(_.last(vtar), '.')) //'app'

    //opt
    let htmlLang = _.get(opt, 'htmlLang', 'zh-tw')
    let title = _.get(opt, 'title', '')
    let head = _.get(opt, 'head', '')
    let newVue = _.get(opt, 'newVue', '')
    let globals = _.get(opt, 'globals', {})
    let external = _.get(opt, 'external', [])

    //h
    let h = `
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="${htmlLang}">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>${title}</title>

    <!-- @babel/polyfill已廢棄 -->
    <script nomodule src="https://cdn.jsdelivr.net/npm/@babel/polyfill@7.12.1/dist/polyfill.min.js"></script>
    
    <!-- vue -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.min.js"></script>

    ${head}

    <!-- ${tarName} -->
    <script src="${tarName}.umd.js?${Date.now()}"></script>

</head>
<body style="font-family:'Microsoft JhengHei','Avenir','Helvetica'; padding:0px; margin:0px;">

    <div id="app">
        <w-app></w-app>
    </div>

    <script>

        //install app
        Vue.component('w-app',${tarName})

        //initialize
        new Vue({
            el: '#app',
            ${newVue}
        })

    </script>

</body>
</html>
`

    //fsCreateFolder
    w.fsCreateFolder(fdTar)

    //rollupFiles
    await rollupFiles({
        fns: `${srcName}`,
        fdSrc,
        fdTar,
        nameDistType: 'kebabCase',
        hookNameDist: () => {
            return tarName
        },
        globals,
        external,
    })

    //app.html
    fs.writeFileSync(`${fdTar}${tarName}.html`, h, 'utf8')

}


export default rollupVueToHtml