electron-vite-vue/script/utils.ts

42 lines
1.3 KiB
TypeScript
Raw Normal View History

2021-02-18 16:11:08 +08:00
import { sep } from 'path'
2021-02-17 22:27:40 +08:00
import { get } from 'http'
import { green } from 'chalk'
2021-02-17 22:27:40 +08:00
/** 轮询监听 vite 启动 */
export function waitOn(arg0: { port: string | number; interval?: number; }) {
return new Promise(resolve => {
const { port, interval = 149 } = arg0
const url = `http://localhost:${port}`
2021-02-17 22:27:40 +08:00
let counter = 0
const timer: NodeJS.Timer = setInterval(() => {
get(url, res => {
2021-02-17 22:27:40 +08:00
clearInterval(timer)
console.log('[waitOn]', green(`"${url}" are already responsive.`), `(${res.statusCode}: ${res.statusMessage})`)
2021-02-17 22:27:40 +08:00
resolve(res.statusCode)
}).on('error', err => {
console.log('[waitOn]', `counter: ${counter++}`)
2021-02-17 22:27:40 +08:00
})
}, interval)
})
}
2021-02-18 16:11:08 +08:00
/** cjs2esm */
export function cjs2esm() {
return {
name: '@rollup/plugin-cjs2esm',
transform(code: string, filename: string) {
if (filename.includes(`${sep}node_modules${sep}`)) {
return code
}
const cjsRegexp = /(const|let|var)[\n\s]+(\w+)[\n\s]*=[\n\s]*require\(["|'](.+)["|']\)/g
const res = code.match(cjsRegexp)
if (res) {
// const Store = require('electron-store') -> import Store from 'electron-store'
code = code.replace(cjsRegexp, `import $2 from '$3'`)
}
return code
},
}
}