🔧 ci: 更新 vite 打包脚本
This commit is contained in:
parent
4aee720da5
commit
591cf2e95e
10 changed files with 146 additions and 135 deletions
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
|
@ -59,4 +59,4 @@ jobs:
|
|||
artifactErrorsFailBuild: true
|
||||
artifacts: "package.zip"
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
prerelease: true
|
||||
prerelease: false
|
||||
|
|
17
package.json
17
package.json
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "plugin-sample-vite-svelte",
|
||||
"version": "0.3.5",
|
||||
"version": "0.3.6",
|
||||
"type": "module",
|
||||
"description": "This is a sample plugin based on vite and svelte for Siyuan (https://b3log.org/siyuan)",
|
||||
"repository": "",
|
||||
|
@ -8,28 +8,29 @@
|
|||
"author": "frostime",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"dev": "cross-env NODE_ENV=development VITE_SOURCEMAP=inline vite build --watch",
|
||||
"build": "cross-env NODE_ENV=production vite build",
|
||||
"make-link": "node --no-warnings ./scripts/make_dev_link.js",
|
||||
"make-link-win": "powershell.exe -NoProfile -ExecutionPolicy Bypass -File ./scripts/elevate.ps1 -scriptPath ./scripts/make_dev_link.js",
|
||||
"dev": "vite build --watch",
|
||||
"update-version": "node --no-warnings ./scripts/update_version.js",
|
||||
"build": "vite build",
|
||||
"make-install": "vite build && node --no-warnings ./scripts/make_install.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sveltejs/vite-plugin-svelte": "^3.0.0",
|
||||
"@sveltejs/vite-plugin-svelte": "^3.1.0",
|
||||
"@tsconfig/svelte": "^4.0.1",
|
||||
"@types/node": "^20.3.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"fast-glob": "^3.2.12",
|
||||
"glob": "^7.2.3",
|
||||
"glob": "^10.0.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"minimist": "^1.2.8",
|
||||
"rollup-plugin-livereload": "^2.0.5",
|
||||
"sass": "^1.63.3",
|
||||
"siyuan": "0.9.9",
|
||||
"svelte": "^4.2.0",
|
||||
"siyuan": "1.0.4",
|
||||
"svelte": "^4.2.19",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^5.1.3",
|
||||
"vite": "^5.0.0",
|
||||
"vite": "^5.2.9",
|
||||
"vite-plugin-static-copy": "^1.0.2",
|
||||
"vite-plugin-zip-pack": "^1.0.5"
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"name": "plugin-sample-vite-svelte",
|
||||
"author": "frostime",
|
||||
"url": "https://github.com/siyuan-note/plugin-sample-vite-svelte",
|
||||
"version": "0.3.5",
|
||||
"version": "0.3.6",
|
||||
"minAppVersion": "3.0.12",
|
||||
"backends": [
|
||||
"windows",
|
||||
|
@ -37,6 +37,8 @@
|
|||
]
|
||||
},
|
||||
"keywords": [
|
||||
"plugin", "sample", "插件样例"
|
||||
"plugin",
|
||||
"sample",
|
||||
"插件样例"
|
||||
]
|
||||
}
|
20
public/i18n/zh_CN.json
Normal file
20
public/i18n/zh_CN.json
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"addTopBarIcon": "使用插件添加一个顶栏按钮",
|
||||
"cancel": "取消",
|
||||
"save": "保存",
|
||||
"byeMenu": "再见,菜单!",
|
||||
"helloPlugin": "你好,插件!",
|
||||
"byePlugin": "再见,插件!",
|
||||
"showDialog": "弹出一个对话框",
|
||||
"removedData": "数据已删除",
|
||||
"confirmRemove": "确认删除 ${name} 中的数据?",
|
||||
"insertEmoji": "插入表情",
|
||||
"removeSpace": "移除空格",
|
||||
"getTab": "在日志中打印出已打开的所有自定义页签",
|
||||
"name": "思源",
|
||||
"hello": {
|
||||
"makesure": "使用这个模板之前,请阅读<a href=\"https://github.com/siyuan-note/plugin-sample\">官方教程</a>, 确保自己已经理解了插件的基本开发流程。"
|
||||
},
|
||||
"hintTitle": "关于",
|
||||
"hintDesc": "<a href='https://github.com/siyuan-note/plugin-sample-vite-svelte'>🔗 plugin-sample-vite-svelte</a><br>💻 @frostime<br>💻 @88250<br>💻 @zxkmm"
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
---
|
||||
addTopBarIcon: 使用插件添加一个顶栏按钮
|
||||
cancel: 取消
|
||||
save: 保存
|
||||
byeMenu: 再见,菜单!
|
||||
helloPlugin: 你好,插件!
|
||||
byePlugin: 再见,插件!
|
||||
showDialog: 弹出一个对话框
|
||||
removedData: 数据已删除
|
||||
confirmRemove: 确认删除 ${name} 中的数据?
|
||||
insertEmoji: 插入表情
|
||||
removeSpace: 移除空格
|
||||
getTab: 在日志中打印出已打开的所有自定义页签
|
||||
name: 思源
|
||||
hello:
|
||||
makesure: 使用这个模板之前,请阅读<a href="https://github.com/siyuan-note/plugin-sample">官方教程</a>,
|
||||
确保自己已经理解了插件的基本开发流程。
|
||||
hintTitle: 关于
|
||||
hintDesc: "<a href='https://github.com/siyuan-note/plugin-sample-vite-svelte'>\U0001F517
|
||||
plugin-sample-vite-svelte</a><br>\U0001F4BB @frostime<br>\U0001F4BB @88250<br>\U0001F4BB
|
||||
@zxkmm"
|
|
@ -1,3 +1,11 @@
|
|||
<!--
|
||||
Copyright (c) 2024 by frostime. All Rights Reserved.
|
||||
Author : frostime
|
||||
Date : 2023-11-19 12:30:45
|
||||
FilePath : /src/hello.svelte
|
||||
LastEditTime : 2024-10-16 14:37:50
|
||||
Description :
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { onDestroy, onMount } from "svelte";
|
||||
import { version, sql as query } from "@/api";
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
#helloPanel {
|
||||
border: 1px rgb(189, 119, 119) dashed;
|
||||
}
|
||||
|
||||
.plugin-sample {
|
||||
&__custom-tab {
|
||||
background-color: var(--b3-theme-background);
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
&__custom-dock {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
&__time {
|
||||
background: var(--b3-card-info-background);
|
||||
border-radius: 4px;
|
||||
padding: 2px 8px;
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@
|
|||
* @Author : frostime
|
||||
* @Date : 2024-03-23 21:37:33
|
||||
* @FilePath : /src/libs/dialog.ts
|
||||
* @LastEditTime : 2024-07-19 15:34:39
|
||||
* @LastEditTime : 2024-10-16 14:31:04
|
||||
* @Description : Kits about dialogs
|
||||
*/
|
||||
import { Dialog } from "siyuan";
|
||||
|
@ -135,7 +135,10 @@ export const simpleDialog = (args: {
|
|||
destroyCallback: args.callback
|
||||
});
|
||||
dialog.element.querySelector(".dialog-content").appendChild(args.ele);
|
||||
return dialog;
|
||||
return {
|
||||
dialog,
|
||||
close: dialog.destroy.bind(dialog)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
@ -147,9 +150,15 @@ export const svelteDialog = (args: {
|
|||
let container = document.createElement('div')
|
||||
container.style.display = 'contents';
|
||||
let component = args.constructor(container);
|
||||
simpleDialog({...args, ele: container, callback: () => {
|
||||
component.$destroy();
|
||||
if (args.callback) args.callback();;
|
||||
}});
|
||||
return component;
|
||||
const { dialog, close } = simpleDialog({
|
||||
...args, ele: container, callback: () => {
|
||||
component.$destroy();
|
||||
if (args.callback) args.callback();
|
||||
}
|
||||
});
|
||||
return {
|
||||
component,
|
||||
dialog,
|
||||
close
|
||||
}
|
||||
}
|
||||
|
|
48
src/libs/promise-pool.ts
Normal file
48
src/libs/promise-pool.ts
Normal file
|
@ -0,0 +1,48 @@
|
|||
export default class PromiseLimitPool<T> {
|
||||
private maxConcurrent: number;
|
||||
private currentRunning = 0;
|
||||
private queue: (() => void)[] = [];
|
||||
private promises: Promise<T>[] = [];
|
||||
|
||||
constructor(maxConcurrent: number) {
|
||||
this.maxConcurrent = maxConcurrent;
|
||||
}
|
||||
|
||||
add(fn: () => Promise<T>): void {
|
||||
const promise = new Promise<T>((resolve, reject) => {
|
||||
const run = async () => {
|
||||
try {
|
||||
this.currentRunning++;
|
||||
const result = await fn();
|
||||
resolve(result);
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
} finally {
|
||||
this.currentRunning--;
|
||||
this.next();
|
||||
}
|
||||
};
|
||||
|
||||
if (this.currentRunning < this.maxConcurrent) {
|
||||
run();
|
||||
} else {
|
||||
this.queue.push(run);
|
||||
}
|
||||
});
|
||||
this.promises.push(promise);
|
||||
}
|
||||
|
||||
async awaitAll(): Promise<T[]> {
|
||||
return Promise.all(this.promises);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the next task in the queue.
|
||||
*/
|
||||
private next(): void {
|
||||
if (this.queue.length > 0 && this.currentRunning < this.maxConcurrent) {
|
||||
const nextRun = this.queue.shift()!;
|
||||
nextRun();
|
||||
}
|
||||
}
|
||||
}
|
106
vite.config.ts
106
vite.config.ts
|
@ -1,6 +1,5 @@
|
|||
import { resolve } from "path"
|
||||
import { defineConfig, loadEnv } from "vite"
|
||||
import minimist from "minimist"
|
||||
import { viteStaticCopy } from "vite-plugin-static-copy"
|
||||
import livereload from "rollup-plugin-livereload"
|
||||
import { svelte } from "@sveltejs/vite-plugin-svelte"
|
||||
|
@ -9,13 +8,15 @@ import fg from 'fast-glob';
|
|||
|
||||
import vitePluginYamlI18n from './yaml-plugin';
|
||||
|
||||
const args = minimist(process.argv.slice(2))
|
||||
const isWatch = args.watch || args.w || false
|
||||
const devDistDir = "dev"
|
||||
const distDir = isWatch ? devDistDir : "dist"
|
||||
const env = process.env;
|
||||
const isSrcmap = env.VITE_SOURCEMAP === 'inline';
|
||||
const isDev = env.NODE_ENV === 'development';
|
||||
|
||||
console.log("isWatch=>", isWatch)
|
||||
console.log("distDir=>", distDir)
|
||||
const outputDir = isDev ? "dev" : "dist";
|
||||
|
||||
console.log("isDev=>", isDev);
|
||||
console.log("isSrcmap=>", isSrcmap);
|
||||
console.log("outputDir=>", outputDir);
|
||||
|
||||
export default defineConfig({
|
||||
resolve: {
|
||||
|
@ -29,92 +30,61 @@ export default defineConfig({
|
|||
|
||||
vitePluginYamlI18n({
|
||||
inDir: 'public/i18n',
|
||||
outDir: `${distDir}/i18n`
|
||||
outDir: `${outputDir}/i18n`
|
||||
}),
|
||||
|
||||
viteStaticCopy({
|
||||
targets: [
|
||||
{
|
||||
src: "./README*.md",
|
||||
dest: "./",
|
||||
},
|
||||
{
|
||||
src: "./plugin.json",
|
||||
dest: "./",
|
||||
},
|
||||
{
|
||||
src: "./preview.png",
|
||||
dest: "./",
|
||||
},
|
||||
{
|
||||
src: "./icon.png",
|
||||
dest: "./",
|
||||
}
|
||||
{ src: "./README*.md", dest: "./" },
|
||||
{ src: "./plugin.json", dest: "./" },
|
||||
{ src: "./preview.png", dest: "./" },
|
||||
{ src: "./icon.png", dest: "./" }
|
||||
],
|
||||
}),
|
||||
],
|
||||
|
||||
// https://github.com/vitejs/vite/issues/1930
|
||||
// https://vitejs.dev/guide/env-and-mode.html#env-files
|
||||
// https://github.com/vitejs/vite/discussions/3058#discussioncomment-2115319
|
||||
// 在这里自定义变量
|
||||
define: {
|
||||
"process.env.DEV_MODE": `"${isWatch}"`,
|
||||
"process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV)
|
||||
"process.env.DEV_MODE": JSON.stringify(isDev),
|
||||
"process.env.NODE_ENV": JSON.stringify(env.NODE_ENV)
|
||||
},
|
||||
|
||||
build: {
|
||||
// 输出路径
|
||||
outDir: distDir,
|
||||
outDir: outputDir,
|
||||
emptyOutDir: false,
|
||||
|
||||
// 构建后是否生成 source map 文件
|
||||
sourcemap: isWatch ? 'inline' : false,
|
||||
|
||||
// 设置为 false 可以禁用最小化混淆
|
||||
// 或是用来指定是应用哪种混淆器
|
||||
// boolean | 'terser' | 'esbuild'
|
||||
// 不压缩,用于调试
|
||||
minify: !isWatch,
|
||||
minify: true,
|
||||
sourcemap: isSrcmap ? 'inline' : false,
|
||||
|
||||
lib: {
|
||||
// Could also be a dictionary or array of multiple entry points
|
||||
entry: resolve(__dirname, "src/index.ts"),
|
||||
// the proper extensions will be added
|
||||
fileName: "index",
|
||||
formats: ["cjs"],
|
||||
},
|
||||
rollupOptions: {
|
||||
plugins: [
|
||||
...(
|
||||
isWatch ? [
|
||||
livereload(devDistDir),
|
||||
{
|
||||
//监听静态资源文件
|
||||
name: 'watch-external',
|
||||
async buildStart() {
|
||||
const files = await fg([
|
||||
'public/i18n/**',
|
||||
'./README*.md',
|
||||
'./plugin.json'
|
||||
]);
|
||||
for (let file of files) {
|
||||
this.addWatchFile(file);
|
||||
}
|
||||
...(isDev ? [
|
||||
livereload(outputDir),
|
||||
{
|
||||
name: 'watch-external',
|
||||
async buildStart() {
|
||||
const files = await fg([
|
||||
'public/i18n/**',
|
||||
'./README*.md',
|
||||
'./plugin.json'
|
||||
]);
|
||||
for (let file of files) {
|
||||
this.addWatchFile(file);
|
||||
}
|
||||
}
|
||||
] : [
|
||||
zipPack({
|
||||
inDir: './dist',
|
||||
outDir: './',
|
||||
outFileName: 'package.zip'
|
||||
})
|
||||
]
|
||||
)
|
||||
}
|
||||
] : [
|
||||
zipPack({
|
||||
inDir: './dist',
|
||||
outDir: './',
|
||||
outFileName: 'package.zip'
|
||||
})
|
||||
])
|
||||
],
|
||||
|
||||
// make sure to externalize deps that shouldn't be bundled
|
||||
// into your library
|
||||
external: ["siyuan", "process"],
|
||||
|
||||
output: {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue