You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
4.6 KiB
JavaScript
212 lines
4.6 KiB
JavaScript
3 months ago
|
const { copyDir, fileForEach, readFile, writeFile, unlinkDirFileByExtname, dirForEach } = require('@jiaminghi/fs')
|
||
|
const print = require('./plugin/print')
|
||
|
const path = require('path')
|
||
|
const exec = require('./plugin/exec')
|
||
|
|
||
|
const PACKAGE_SRC = './src'
|
||
|
const COMPILE_SRC = './lib'
|
||
|
const COMPONENTS_DIR = '/components'
|
||
|
const ENTRANCE = '/index.js'
|
||
|
const libName = 'datav'
|
||
|
|
||
|
async function start () {
|
||
|
// Compile for NPM
|
||
|
|
||
|
const copyPackage = await copyDir(PACKAGE_SRC, COMPILE_SRC)
|
||
|
|
||
|
if (!copyPackage) {
|
||
|
print.error('Exception in file copy!')
|
||
|
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
print.success('Complete file copy!')
|
||
|
|
||
|
const abstract = await abstractLessFromVue()
|
||
|
|
||
|
if (!abstract) {
|
||
|
print.error('Exception in less file extraction!')
|
||
|
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
print.success('Complete less file extraction!')
|
||
|
|
||
|
await compileLessToCss()
|
||
|
|
||
|
print.success('Complete less compilation to css!')
|
||
|
|
||
|
const unlink = await unlinkDirFileByExtname(COMPILE_SRC, ['.less'])
|
||
|
|
||
|
if (!unlink) {
|
||
|
print.error('Exception in less file deletion!')
|
||
|
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
print.success('Complete less file deletion!')
|
||
|
|
||
|
const addImport = await addCssImport()
|
||
|
|
||
|
if (!addImport) {
|
||
|
print.error('Exception in adding css import statement!')
|
||
|
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
print.success('Finish adding css import statement!')
|
||
|
|
||
|
const componentsExport = await addComponentsExport()
|
||
|
|
||
|
if (!componentsExport) {
|
||
|
print.error('Exception in adding components export statement!')
|
||
|
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
print.success('Finish adding components export statement!')
|
||
|
|
||
|
// Compile for UMD version
|
||
|
const rollupCompile = await exec(`rollup -c build/rollup.config.js`)
|
||
|
|
||
|
if (!rollupCompile) {
|
||
|
print.error('Exception in rollupCompile')
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
print.tip('After rollupCompile')
|
||
|
|
||
|
const terser = await exec(`rollup -c build/rollup.terser.config.js`)
|
||
|
|
||
|
if (!terser) {
|
||
|
print.error('Exception in terser')
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
print.tip('After terser')
|
||
|
|
||
|
print.yellow('-------------------------------------')
|
||
|
print.success(' DataV Lib Compile Success! ')
|
||
|
print.yellow('-------------------------------------')
|
||
|
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
async function abstractLessFromVue () {
|
||
|
let abstractSuccess = true
|
||
|
|
||
|
await fileForEach(COMPILE_SRC, async src => {
|
||
|
if (path.extname(src) !== '.vue') return
|
||
|
|
||
|
let template = await readFile(src)
|
||
|
|
||
|
let style = template.match(/<style[ \S\n\r]*/g)
|
||
|
if (style) style = style[0]
|
||
|
if (!style) return
|
||
|
|
||
|
style = style.replace(/<style[ a-z="']*>(\n|\r)?|<\/style>/g, '')
|
||
|
style = style.replace(/[\n\r]*$/, '')
|
||
|
|
||
|
const styleSrc = src.replace('.vue', '.less')
|
||
|
let write = await writeFile(styleSrc, style)
|
||
|
|
||
|
if (!write) {
|
||
|
print.error(styleSrc + ' write error!')
|
||
|
|
||
|
abstractSuccess = false
|
||
|
}
|
||
|
|
||
|
template = template.replace(/<style[ \S\n\r]*/g, '')
|
||
|
template = template.replace(/[\n\r]*$/, '')
|
||
|
write = await writeFile(src, template)
|
||
|
|
||
|
if (!write) {
|
||
|
print.error(src + ' rewrite error!')
|
||
|
|
||
|
abstractSuccess = false
|
||
|
}
|
||
|
})
|
||
|
|
||
|
return abstractSuccess
|
||
|
}
|
||
|
|
||
|
async function compileLessToCss () {
|
||
|
let compileSuccess = true
|
||
|
|
||
|
await fileForEach(COMPILE_SRC, async src => {
|
||
|
if (path.extname(src) !== '.less') return
|
||
|
|
||
|
src = src.replace('./', '')
|
||
|
|
||
|
const execString = `lessc ${src} ${src.replace('less', 'css')}`
|
||
|
|
||
|
print.yellow(execString, {
|
||
|
maxBuffer: 1024 ** 5
|
||
|
})
|
||
|
|
||
|
const compile = await exec(execString)
|
||
|
|
||
|
if (!compile) {
|
||
|
print.error(execString + ' Error!')
|
||
|
|
||
|
compileSuccess = false
|
||
|
}
|
||
|
})
|
||
|
|
||
|
return compileSuccess
|
||
|
}
|
||
|
|
||
|
async function addCssImport () {
|
||
|
let importSuccess = true
|
||
|
|
||
|
await fileForEach(COMPILE_SRC + COMPONENTS_DIR, async src => {
|
||
|
if (path.extname(src) !== '.js') return
|
||
|
|
||
|
let content = await readFile(src)
|
||
|
|
||
|
if (content.search(/import[ \S]* from '[\S]*\.vue'/) === -1) return
|
||
|
|
||
|
content = `import './src/main.css'\n` + content
|
||
|
|
||
|
let write = await writeFile(src, content)
|
||
|
|
||
|
if (!write) {
|
||
|
print.error(src + ' write import error!')
|
||
|
|
||
|
importSuccess = false
|
||
|
}
|
||
|
})
|
||
|
|
||
|
return importSuccess
|
||
|
}
|
||
|
|
||
|
async function addComponentsExport () {
|
||
|
const components = []
|
||
|
|
||
|
await dirForEach(COMPILE_SRC + COMPONENTS_DIR, src => {
|
||
|
components.push(src.split('/').slice(-1)[0])
|
||
|
})
|
||
|
|
||
|
const importString = components.reduce((all, current) => {
|
||
|
return all + '\n' + `export { default as ${current} } from '.${COMPONENTS_DIR}/${current}/index'`
|
||
|
}, '/**\n * EXPORT COMPONENTS\n */') + '\n'
|
||
|
|
||
|
const targetSrc = COMPILE_SRC + ENTRANCE
|
||
|
|
||
|
let content = await readFile(targetSrc)
|
||
|
|
||
|
content = importString + content
|
||
|
|
||
|
let write = await writeFile(targetSrc, content)
|
||
|
|
||
|
return write
|
||
|
}
|
||
|
|
||
|
async function compileUMDVersion () {
|
||
|
|
||
|
}
|
||
|
|
||
|
start()
|