修复编译
parent
661542fa41
commit
946c240c18
132
lib/main.js
132
lib/main.js
|
@ -1,78 +1,94 @@
|
||||||
import fs from 'iofs'
|
import fs from 'iofs'
|
||||||
import { join, resolve, dirname, parse } from 'path'
|
import { join } from 'path'
|
||||||
import Es from 'esbuild'
|
import Es from 'esbuild'
|
||||||
import chokidar from 'chokidar'
|
import chokidar from 'chokidar'
|
||||||
import { red, blue } from 'kolorist'
|
import { red, blue } from 'kolorist'
|
||||||
import { compileScss } from './utils.js'
|
import { compileScss } from './utils.js'
|
||||||
|
|
||||||
const noc = Buffer.from('')
|
const OPTIONS = {
|
||||||
|
target: 'esnext',
|
||||||
|
minify: false,
|
||||||
|
format: 'esm'
|
||||||
|
}
|
||||||
|
|
||||||
export default function compile(root = '', isProd = false, es) {
|
function parse(origin, target, name) {
|
||||||
|
let ext = name.slice(name.lastIndexOf('.') + 1)
|
||||||
|
|
||||||
|
switch (ext) {
|
||||||
|
case 'css':
|
||||||
|
case 'jpg':
|
||||||
|
case 'png':
|
||||||
|
case 'svg':
|
||||||
|
case 'json':
|
||||||
|
case 'gif':
|
||||||
|
case 'webp':
|
||||||
|
console.log('复制 %s ...', blue(name))
|
||||||
|
fs.cp(origin, target)
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'js':
|
||||||
|
{
|
||||||
|
let code = fs.cat(origin).toString()
|
||||||
|
console.log('编译 %s ...', blue(name))
|
||||||
|
try {
|
||||||
|
code = Es.transformSync(code, OPTIONS).code
|
||||||
|
} catch (err) {
|
||||||
|
console.log('compile scss: ', name)
|
||||||
|
console.error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
code = code.replace(/css`([\w\W]*?)`/g, function (m, scss) {
|
||||||
|
scss = compileScss(scss)
|
||||||
|
return `css\`${scss}\``
|
||||||
|
})
|
||||||
|
fs.echo(code, target)
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function compile(root = '', isProd = false, es = 'esnext') {
|
||||||
//
|
//
|
||||||
const SOURCE_DIR = join(root, 'src')
|
const SOURCE_DIR = join(root, 'src')
|
||||||
const DIST_DIR = join(root, 'dist')
|
const DIST_DIR = join(root, 'dist')
|
||||||
|
|
||||||
const OPTIONS = {
|
OPTIONS.target = es
|
||||||
target: es || 'esnext',
|
OPTIONS.minify = isProd
|
||||||
minify: isProd,
|
|
||||||
format: 'esm'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isProd) {
|
if (isProd) {
|
||||||
fs.rm(DIST_DIR, true)
|
fs.rm(DIST_DIR, true)
|
||||||
}
|
|
||||||
let ready = false
|
|
||||||
|
|
||||||
chokidar
|
let list = fs.ls(SOURCE_DIR, true)
|
||||||
.watch(SOURCE_DIR)
|
|
||||||
.on('all', (act, filePath) => {
|
|
||||||
let file = filePath.slice(SOURCE_DIR.length)
|
|
||||||
let target = join(DIST_DIR, file)
|
|
||||||
|
|
||||||
if (ready) {
|
list.forEach(it => {
|
||||||
console.clear()
|
if (fs.isfile(it)) {
|
||||||
}
|
if (it.endsWith('.DS_Store') || it.includes('/.')) {
|
||||||
|
return
|
||||||
if (act === 'add' || act === 'change') {
|
|
||||||
let ext = file.slice(file.lastIndexOf('.') + 1)
|
|
||||||
|
|
||||||
switch (ext) {
|
|
||||||
case 'css':
|
|
||||||
case 'jpg':
|
|
||||||
case 'png':
|
|
||||||
case 'svg':
|
|
||||||
case 'json':
|
|
||||||
case 'gif':
|
|
||||||
case 'webp':
|
|
||||||
console.log('复制 %s ...', blue(file))
|
|
||||||
fs.cp(filePath, target)
|
|
||||||
break
|
|
||||||
|
|
||||||
case 'js':
|
|
||||||
{
|
|
||||||
let code = fs.cat(filePath).toString()
|
|
||||||
console.log('编译 %s ...', blue(file))
|
|
||||||
try {
|
|
||||||
code = code.replace(/css`([\w\W]*?)`/g, function (m, scss) {
|
|
||||||
scss = compileScss(scss)
|
|
||||||
return `css\`${scss}\``
|
|
||||||
})
|
|
||||||
code = Es.transformSync(code, OPTIONS).code
|
|
||||||
} catch (err) {
|
|
||||||
console.log('compile scss: ', file)
|
|
||||||
console.error(err)
|
|
||||||
}
|
|
||||||
fs.echo(code, target)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
|
let name = it.slice(SOURCE_DIR.length)
|
||||||
|
let target = join(DIST_DIR, name)
|
||||||
|
parse(it, target, name)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.on('ready', () => {
|
} else {
|
||||||
console.clear()
|
let ready = false
|
||||||
ready = true
|
|
||||||
if (isProd) {
|
chokidar
|
||||||
process.exit()
|
.watch(SOURCE_DIR)
|
||||||
}
|
.on('all', (act, filePath) => {
|
||||||
})
|
let name = filePath.slice(SOURCE_DIR.length)
|
||||||
|
let target = join(DIST_DIR, name)
|
||||||
|
|
||||||
|
if (ready) {
|
||||||
|
console.clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (act === 'add' || act === 'change') {
|
||||||
|
parse(filePath, target, name)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.on('ready', () => {
|
||||||
|
ready = true
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "@bd/wcui-cli",
|
"name": "@bd/wcui-cli",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "1.2.1",
|
"version": "1.2.2",
|
||||||
"bin": {
|
"bin": {
|
||||||
"wcui-cli": "index.js"
|
"wcui-cli": "index.js"
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue