feature: 支持引入模块外的文件
This commit is contained in:
parent
d55f3865e7
commit
f3b6eb9878
|
@ -5,14 +5,17 @@ import './tailwindcss.js'
|
||||||
import Koa from 'koa'
|
import Koa from 'koa'
|
||||||
import KoaStatic from 'koa-static'
|
import KoaStatic from 'koa-static'
|
||||||
import Router from 'koa-router'
|
import Router from 'koa-router'
|
||||||
import { Component } from 'yunzai/utils'
|
import { Component, createRequire } from 'yunzai/utils'
|
||||||
import { readdirSync } from 'fs'
|
import { readdirSync } from 'fs'
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
|
import mount from 'koa-mount'
|
||||||
|
const require = createRequire(import.meta.url)
|
||||||
|
|
||||||
const Com = new Component()
|
const Com = new Component()
|
||||||
const app = new Koa()
|
const app = new Koa()
|
||||||
const router = new Router()
|
const router = new Router()
|
||||||
const Port = 8080
|
const Port = 8080
|
||||||
|
const PATH = process.cwd()
|
||||||
|
|
||||||
// 得到plugins目录
|
// 得到plugins目录
|
||||||
const flies = readdirSync(join(process.cwd(), 'plugins'), {
|
const flies = readdirSync(join(process.cwd(), 'plugins'), {
|
||||||
|
@ -40,11 +43,17 @@ for (const flie of flies) {
|
||||||
console.log(`http://127.0.0.1:${Port}${url}`)
|
console.log(`http://127.0.0.1:${Port}${url}`)
|
||||||
const options = item?.options ?? {}
|
const options = item?.options ?? {}
|
||||||
router.get(url, ctx => {
|
router.get(url, ctx => {
|
||||||
ctx.body = Com.create(item.element, {
|
const href = require('../public/output.css')
|
||||||
|
const HTML = Com.create(item.element, {
|
||||||
...options,
|
...options,
|
||||||
html_head: `${options?.html_head ?? ''}<link rel="stylesheet" href="/output.css">`,
|
html_head: `${options?.html_head ?? ''}<link rel="stylesheet" href="${href}">`,
|
||||||
file_create: false
|
file_create: false
|
||||||
})
|
})
|
||||||
|
// 转义路径中的所有反斜杠
|
||||||
|
const escapedPath = PATH.replace(/\\/g, '\\\\')
|
||||||
|
// 创建一个正则表达式,'g' 表示全局匹配
|
||||||
|
const regex = new RegExp(escapedPath, 'g')
|
||||||
|
ctx.body = HTML.replace(regex, '/file')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,7 +62,7 @@ for (const flie of flies) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
app.use(KoaStatic('public'))
|
app.use(mount('/file', KoaStatic(PATH)))
|
||||||
|
|
||||||
// routes
|
// routes
|
||||||
app.use(router.routes())
|
app.use(router.routes())
|
||||||
|
|
|
@ -1,14 +1,7 @@
|
||||||
import { exec } from 'child_process'
|
import { execSync } from 'child_process'
|
||||||
/**
|
/**
|
||||||
* **********
|
* **********
|
||||||
* 生成css文件
|
* 生成css文件
|
||||||
* **********
|
* **********
|
||||||
*/
|
*/
|
||||||
exec(
|
execSync('tailwindcss -i ./src/input.css -o ./public/output.css --watch')
|
||||||
'tailwindcss -i ./src/input.css -o ./public/output.css --watch',
|
|
||||||
(error, _, __) => {
|
|
||||||
if (error) {
|
|
||||||
//
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
11
index.js
11
index.js
|
@ -1,4 +1,4 @@
|
||||||
import { exec, spawn } from 'child_process'
|
import { execSync, spawn } from 'child_process'
|
||||||
const argv = [...process.argv].splice(2)
|
const argv = [...process.argv].splice(2)
|
||||||
const argvs = argv.join(' ').replace(/(\S+\.js|\S+\.ts)/g, '')
|
const argvs = argv.join(' ').replace(/(\S+\.js|\S+\.ts)/g, '')
|
||||||
|
|
||||||
|
@ -7,14 +7,7 @@ const argvs = argv.join(' ').replace(/(\S+\.js|\S+\.ts)/g, '')
|
||||||
* 生成css文件
|
* 生成css文件
|
||||||
* **********
|
* **********
|
||||||
*/
|
*/
|
||||||
exec(
|
execSync('tailwindcss -i ./src/input.css -o ./public/output.css')
|
||||||
'tailwindcss -i ./src/input.css -o ./public/output.css',
|
|
||||||
(error, _, __) => {
|
|
||||||
if (error) {
|
|
||||||
//
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ***************
|
* ***************
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
"icqq": "^0.6.10",
|
"icqq": "^0.6.10",
|
||||||
"image-size": "^1.1.1",
|
"image-size": "^1.1.1",
|
||||||
"inquirer": "^9.2.16",
|
"inquirer": "^9.2.16",
|
||||||
|
"koa-mount": "^4.0.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"log4js": "^6.9.1",
|
"log4js": "^6.9.1",
|
||||||
"md5": "^2.3.0",
|
"md5": "^2.3.0",
|
||||||
|
@ -39,7 +40,7 @@
|
||||||
"node-schedule": "^2.1.1",
|
"node-schedule": "^2.1.1",
|
||||||
"oicq": "^2.3.1",
|
"oicq": "^2.3.1",
|
||||||
"pm2": "^5.3.1",
|
"pm2": "^5.3.1",
|
||||||
"puppeteer": "*",
|
"puppeteer": "^22.11.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"redis": "^4.6.13",
|
"redis": "^4.6.13",
|
||||||
|
@ -59,6 +60,7 @@
|
||||||
"@types/lodash": "^4.14.200",
|
"@types/lodash": "^4.14.200",
|
||||||
"@types/node": "^20.8.5",
|
"@types/node": "^20.8.5",
|
||||||
"@types/node-schedule": "^2.1.7",
|
"@types/node-schedule": "^2.1.7",
|
||||||
|
"@types/koa-mount": "^4.0.5",
|
||||||
"@types/react-dom": "^18.2.22",
|
"@types/react-dom": "^18.2.22",
|
||||||
"@types/redis": "^4.0.11",
|
"@types/redis": "^4.0.11",
|
||||||
"@types/ws": "^8.5.7",
|
"@types/ws": "^8.5.7",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Sequelize, DataTypes, Model } from 'sequelize'
|
import { Sequelize, DataTypes, Model } from 'sequelize'
|
||||||
import { Data } from '#miao'
|
import { Data } from '../miao.js'
|
||||||
|
|
||||||
Data.createDir('/data/db', 'root')
|
Data.createDir('/data/db', 'root')
|
||||||
|
|
||||||
|
|
61
src/miao.ts
61
src/miao.ts
|
@ -1,63 +1,2 @@
|
||||||
export { Common, Data, Version } from '#miao'
|
export { Common, Data, Version } from '#miao'
|
||||||
export { Character, Weapon } from '#miao.models'
|
export { Character, Weapon } from '#miao.models'
|
||||||
// import lodash from 'lodash'
|
|
||||||
// import { existsSync, mkdirSync } from 'node:fs'
|
|
||||||
// import util from 'node:util'
|
|
||||||
|
|
||||||
// const rootPath = process.cwd()
|
|
||||||
// const _path = rootPath
|
|
||||||
|
|
||||||
// const getRoot = (root = '') => {
|
|
||||||
// if (!root) {
|
|
||||||
// root = `${_path}/`
|
|
||||||
// } else if (root === 'root' || root === 'yunzai') {
|
|
||||||
// root = `${_path}/`
|
|
||||||
// } else if (root === 'miao') {
|
|
||||||
// root = `${_path}/plugins/miao-plugin/`
|
|
||||||
// } else {
|
|
||||||
// root = `${_path}/plugins/${root}/`
|
|
||||||
// }
|
|
||||||
// return root
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export const Data = {
|
|
||||||
// //
|
|
||||||
// createDir(path = '', root = '', includeFile = false) {
|
|
||||||
// root = getRoot(root)
|
|
||||||
// let pathList = path.split('/')
|
|
||||||
// let nowPath = root
|
|
||||||
// pathList.forEach((name, idx) => {
|
|
||||||
// name = name.trim()
|
|
||||||
// if (!includeFile && idx <= pathList.length - 1) {
|
|
||||||
// nowPath += name + '/'
|
|
||||||
// if (name) {
|
|
||||||
// if (!existsSync(nowPath)) {
|
|
||||||
// mkdirSync(nowPath)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// },
|
|
||||||
// isPromise(data) {
|
|
||||||
// return util.types.isPromise(data)
|
|
||||||
// },
|
|
||||||
// async forEach(data, fn) {
|
|
||||||
// if (lodash.isArray(data)) {
|
|
||||||
// for (let idx = 0; idx < data.length; idx++) {
|
|
||||||
// let ret = fn(data[idx], idx)
|
|
||||||
// ret = Data.isPromise(ret) ? await ret : ret
|
|
||||||
// if (ret === false) {
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } else if (lodash.isPlainObject(data)) {
|
|
||||||
// for (const idx in data) {
|
|
||||||
// let ret = fn(data[idx], idx)
|
|
||||||
// ret = Data.isPromise(ret) ? await ret : ret
|
|
||||||
// if (ret === false) {
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
|
@ -2,7 +2,8 @@ import React from 'react'
|
||||||
import { renderToString } from 'react-dom/server'
|
import { renderToString } from 'react-dom/server'
|
||||||
import { mkdirSync, writeFileSync } from 'fs'
|
import { mkdirSync, writeFileSync } from 'fs'
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
|
import { createRequire } from './module.js'
|
||||||
|
const require = createRequire(import.meta.url)
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -41,8 +42,9 @@ export class Component {
|
||||||
const dir = join(this.#dir, options?.join_dir ?? '')
|
const dir = join(this.#dir, options?.join_dir ?? '')
|
||||||
mkdirSync(dir, { recursive: true })
|
mkdirSync(dir, { recursive: true })
|
||||||
const address = join(dir, options?.html_name ?? 'hello.html')
|
const address = join(dir, options?.html_name ?? 'hello.html')
|
||||||
|
const href = require('../../public/output.css')
|
||||||
const DOCTYPE = '<!DOCTYPE html>'
|
const DOCTYPE = '<!DOCTYPE html>'
|
||||||
const Link = `<link rel="stylesheet" href="../public/output.css"></link>`
|
const Link = `<link rel="stylesheet" href="${href}"></link>`
|
||||||
const head = `<head>${options?.html_head ?? Link}</head>`
|
const head = `<head>${options?.html_head ?? Link}</head>`
|
||||||
const body = `<body> ${str} ${options?.html_body ?? ''}</body>`
|
const body = `<body> ${str} ${options?.html_body ?? ''}</body>`
|
||||||
const html = `${DOCTYPE}<html>${head}${body}</html>`
|
const html = `${DOCTYPE}<html>${head}${body}</html>`
|
||||||
|
|
|
@ -3,6 +3,7 @@ export * from './puppeteer.js'
|
||||||
export * from './types.js'
|
export * from './types.js'
|
||||||
export * from './common.js'
|
export * from './common.js'
|
||||||
export * from './component.js'
|
export * from './component.js'
|
||||||
|
export * from './module.js'
|
||||||
/**
|
/**
|
||||||
* 旧版本兼容性方法
|
* 旧版本兼容性方法
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
import { createRequire as cRequire } from 'module'
|
||||||
|
import path from 'path'
|
||||||
|
/**
|
||||||
|
* 加载指定资源的本地路径
|
||||||
|
* @param basePath 引入模块地址
|
||||||
|
* @param customExtensions ['.css', '.png', '.jpg', '.less', '.scss']
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function createRequire(
|
||||||
|
basePath,
|
||||||
|
customExtensions = ['.css', '.png', '.jpg', '.less', '.scss']
|
||||||
|
) {
|
||||||
|
const require = cRequire(basePath)
|
||||||
|
customExtensions.forEach(ext => {
|
||||||
|
require.extensions[ext] = (module, filename) => {
|
||||||
|
module.exports = path.resolve(filename)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return require
|
||||||
|
}
|
|
@ -0,0 +1,242 @@
|
||||||
|
// CSS modules
|
||||||
|
type CSSModuleClasses = { readonly [key: string]: string }
|
||||||
|
|
||||||
|
declare module '*.module.css' {
|
||||||
|
const classes: CSSModuleClasses
|
||||||
|
export default classes
|
||||||
|
}
|
||||||
|
declare module '*.module.scss' {
|
||||||
|
const classes: CSSModuleClasses
|
||||||
|
export default classes
|
||||||
|
}
|
||||||
|
declare module '*.module.sass' {
|
||||||
|
const classes: CSSModuleClasses
|
||||||
|
export default classes
|
||||||
|
}
|
||||||
|
declare module '*.module.less' {
|
||||||
|
const classes: CSSModuleClasses
|
||||||
|
export default classes
|
||||||
|
}
|
||||||
|
declare module '*.module.styl' {
|
||||||
|
const classes: CSSModuleClasses
|
||||||
|
export default classes
|
||||||
|
}
|
||||||
|
declare module '*.module.stylus' {
|
||||||
|
const classes: CSSModuleClasses
|
||||||
|
export default classes
|
||||||
|
}
|
||||||
|
declare module '*.module.pcss' {
|
||||||
|
const classes: CSSModuleClasses
|
||||||
|
export default classes
|
||||||
|
}
|
||||||
|
declare module '*.module.sss' {
|
||||||
|
const classes: CSSModuleClasses
|
||||||
|
export default classes
|
||||||
|
}
|
||||||
|
|
||||||
|
// CSS
|
||||||
|
declare module '*.css' {}
|
||||||
|
declare module '*.scss' {}
|
||||||
|
declare module '*.sass' {}
|
||||||
|
declare module '*.less' {}
|
||||||
|
declare module '*.styl' {}
|
||||||
|
declare module '*.stylus' {}
|
||||||
|
declare module '*.pcss' {}
|
||||||
|
declare module '*.sss' {}
|
||||||
|
|
||||||
|
// Built-in asset types
|
||||||
|
// see `src/node/constants.ts`
|
||||||
|
|
||||||
|
// images
|
||||||
|
declare module '*.apng' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.png' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.jpg' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.jpeg' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.jfif' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.pjpeg' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.pjp' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.gif' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.svg' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.ico' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.webp' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.avif' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
|
||||||
|
// media
|
||||||
|
declare module '*.mp4' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.webm' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.ogg' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.mp3' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.wav' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.flac' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.aac' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.opus' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.mov' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.m4a' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.vtt' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
|
||||||
|
// fonts
|
||||||
|
declare module '*.woff' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.woff2' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.eot' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.ttf' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.otf' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
|
||||||
|
// other
|
||||||
|
declare module '*.webmanifest' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.pdf' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
declare module '*.txt' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
|
||||||
|
// wasm?init
|
||||||
|
declare module '*.wasm?init' {
|
||||||
|
const initWasm: (
|
||||||
|
options?: WebAssembly.Imports
|
||||||
|
) => Promise<WebAssembly.Instance>
|
||||||
|
export default initWasm
|
||||||
|
}
|
||||||
|
|
||||||
|
// web worker
|
||||||
|
declare module '*?worker' {
|
||||||
|
const workerConstructor: {
|
||||||
|
new (options?: { name?: string }): Worker
|
||||||
|
}
|
||||||
|
export default workerConstructor
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module '*?worker&inline' {
|
||||||
|
const workerConstructor: {
|
||||||
|
new (options?: { name?: string }): Worker
|
||||||
|
}
|
||||||
|
export default workerConstructor
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module '*?worker&url' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module '*?sharedworker' {
|
||||||
|
const sharedWorkerConstructor: {
|
||||||
|
new (options?: { name?: string }): SharedWorker
|
||||||
|
}
|
||||||
|
export default sharedWorkerConstructor
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module '*?sharedworker&inline' {
|
||||||
|
const sharedWorkerConstructor: {
|
||||||
|
new (options?: { name?: string }): SharedWorker
|
||||||
|
}
|
||||||
|
export default sharedWorkerConstructor
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module '*?sharedworker&url' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module '*?raw' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module '*?url' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module '*?inline' {
|
||||||
|
const src: string
|
||||||
|
export default src
|
||||||
|
}
|
Loading…
Reference in New Issue