1.0.0
parent
f1b393737e
commit
946a820230
|
@ -0,0 +1,14 @@
|
|||
.vscode
|
||||
node_modules/
|
||||
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
package-lock.json
|
||||
|
||||
._*
|
||||
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
|
@ -0,0 +1,17 @@
|
|||
# create-wcui
|
||||
一个快速创建wcui项目的小工具
|
||||
|
||||
|
||||
[![fite](https://badgen.net/npm/v/create-wcui)](https://www.npmjs.com/package/create-wcui)
|
||||
|
||||
|
||||
### 使用方式
|
||||
|
||||
```bash
|
||||
npm create wcui
|
||||
|
||||
# 或者
|
||||
npm create wcui@latest
|
||||
```
|
||||
|
||||
注意: `@latest`可以确保你初始化的`wcui`配置是最新的。
|
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* {}
|
||||
* @author yutent<yutent.io@gmail.com>
|
||||
* @date 2022/09/28 15:12:45
|
||||
*/
|
||||
|
||||
import fs from 'iofs'
|
||||
import { join, normalize } from 'path'
|
||||
import { red, blue } from 'kolorist'
|
||||
|
||||
import compile from './lib/main.js'
|
||||
|
||||
const WORK_SPACE = process.cwd()
|
||||
const IS_WINDOWS = process.platform === 'win32'
|
||||
|
||||
const NODE_VERSION = +process.versions.node.split('.').slice(0, 2).join('.')
|
||||
|
||||
let args = process.argv.slice(2)
|
||||
|
||||
if (NODE_VERSION < 16.6) {
|
||||
console.log(red('Error: 你当前的环境不满足 @bd/core 构建工具的要求'))
|
||||
console.log(
|
||||
'@bd/core 需要Node.js版本在 %s 以上, \n你当前的Node.js版本为: %s',
|
||||
blue('v16.6.0'),
|
||||
red(process.version),
|
||||
'\n\n'
|
||||
)
|
||||
process.exit()
|
||||
}
|
||||
|
||||
switch (args[0]) {
|
||||
case 'dev':
|
||||
compile(WORK_SPACE)
|
||||
break
|
||||
|
||||
case 'build':
|
||||
compile(WORK_SPACE, true)
|
||||
break
|
||||
|
||||
case 'build-es6':
|
||||
compile(WORK_SPACE, true, 'es6')
|
||||
break
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
import fs from 'iofs'
|
||||
import { join, resolve, dirname, parse } from 'path'
|
||||
import Es from 'esbuild'
|
||||
import chokidar from 'chokidar'
|
||||
import { red, blue } from 'kolorist'
|
||||
import { compileScss } from './utils.js'
|
||||
|
||||
const noc = Buffer.from('')
|
||||
|
||||
export default function compile(root = '', isProd = false, es) {
|
||||
//
|
||||
const SOURCE_DIR = join(root, 'src')
|
||||
const DIST_DIR = join(root, 'dist')
|
||||
|
||||
const OPTIONS = {
|
||||
target: es || 'esnext',
|
||||
minify: isProd,
|
||||
format: 'esm'
|
||||
}
|
||||
|
||||
if (isProd) {
|
||||
fs.rm(DIST_DIR, true)
|
||||
}
|
||||
|
||||
let ready = false
|
||||
|
||||
chokidar
|
||||
.watch(SOURCE_DIR)
|
||||
.on('all', (act, filePath) => {
|
||||
if (isProd || ready) {
|
||||
let file = filePath.slice(SOURCE_DIR.length)
|
||||
let target = join(DIST_DIR, file)
|
||||
|
||||
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))
|
||||
code = Es.transformSync(code, OPTIONS).code.replace(
|
||||
/css`([\w\W]*?)`/g,
|
||||
function (m, scss) {
|
||||
scss = compileScss(scss)
|
||||
return `css\`${scss}\``
|
||||
}
|
||||
)
|
||||
|
||||
fs.echo(code, target)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.on('ready', () => {
|
||||
ready = true
|
||||
if (isProd) {
|
||||
process.exit()
|
||||
}
|
||||
})
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
import scss from '@bytedo/sass'
|
||||
import fs from 'iofs'
|
||||
|
||||
const OPTIONS = {
|
||||
indentType: 'space',
|
||||
indentWidth: 2
|
||||
}
|
||||
|
||||
/**
|
||||
* 编译scss为css
|
||||
* @param file <String> 文件路径或scss代码
|
||||
* @param mini <Boolean> 是否压缩
|
||||
*/
|
||||
export function compileScss(file, mini = true) {
|
||||
let style = mini ? 'compressed' : 'expanded'
|
||||
try {
|
||||
if (fs.isfile(file)) {
|
||||
return scss.compile(file, { style, ...OPTIONS }).css.trim()
|
||||
} else {
|
||||
return scss.compileString(file, { style, ...OPTIONS }).css.trim()
|
||||
}
|
||||
} catch (err) {
|
||||
console.log('compile scss: ', file)
|
||||
console.error(err)
|
||||
}
|
||||
}
|
22
package.json
22
package.json
|
@ -1,11 +1,17 @@
|
|||
{
|
||||
"name": "create-wcui",
|
||||
"version": "0.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
"name": "@bd/wcui-cli",
|
||||
"type": "module",
|
||||
"version": "1.0.0",
|
||||
"bin": {
|
||||
"wcui-cli": "index.js"
|
||||
},
|
||||
"author": "",
|
||||
"license": "MIT"
|
||||
"dependencies": {
|
||||
"@bytedo/sass": "^1.58.3",
|
||||
"esbuild": "^0.17.11",
|
||||
"iofs": "^1.5.2",
|
||||
"kolorist": "^1.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.14.0"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue