perf: webpack config

This commit is contained in:
linyuchen 2023-11-08 00:18:44 +08:00
parent 5c2612a7ef
commit 97a315cd8a
14 changed files with 2644 additions and 742 deletions

View File

@ -24,8 +24,8 @@
"darwin" "darwin"
], ],
"injects": { "injects": {
"renderer": "./dist/renderer.js", "renderer": "./renderer.js",
"main": "./dist/main.js", "main": "./main.js",
"preload": "./dist/preload.js" "preload": "./preload.js"
} }
} }

3174
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -2,10 +2,13 @@
"name": "llonebot", "name": "llonebot",
"version": "1.0.0", "version": "1.0.0",
"description": "NTQQLiteLoaderOneBotApi", "description": "NTQQLiteLoaderOneBotApi",
"main": "index.js", "main": "dist/main.js",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1", "test": "echo \"Error: no test specified\" && exit 1",
"build": "tsc & tsc -p src/tsconfig.json", "build": "npm run build-main && npm run build-preload && npm run build-renderer",
"build-main": "webpack --config webpack.main.config.js",
"build-preload": "webpack --config webpack.preload.config.js",
"build-renderer": "webpack --config webpack.renderer.config.js",
"build-mac": "npm run build && npm run deploy-mac", "build-mac": "npm run build && npm run deploy-mac",
"deploy-mac": "cp dist/* ~/Library/Containers/com.tencent.qq/Data/Documents/LiteLoaderQQNT/plugins/LLOnebot/", "deploy-mac": "cp dist/* ~/Library/Containers/com.tencent.qq/Data/Documents/LiteLoaderQQNT/plugins/LLOnebot/",
"build-win": "npm run build && npm run deploy-win", "build-win": "npm run build && npm run deploy-win",
@ -14,18 +17,16 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"electron": "^27.0.2", "express": "^4.18.2"
"express": "^4.18.2",
"path": "^0.12.7",
"stream": "^0.0.2",
"typescript": "^5.2.2",
"url": "^0.11.3"
}, },
"devDependencies": { "devDependencies": {
"electron": "^27.0.2",
"@babel/preset-env": "^7.23.2",
"@types/express": "^4.17.20", "@types/express": "^4.17.20",
"babel-loader": "^9.1.3",
"ts-loader": "^9.5.0", "ts-loader": "^9.5.0",
"vite": "^4.5.0",
"webpack": "^5.89.0", "webpack": "^5.89.0",
"webpack-cli": "^5.1.4" "webpack-cli": "^5.1.4",
"typescript": "^5.2.2"
} }
} }

1
src/global.d.ts vendored
View File

@ -1,7 +1,6 @@
import {Group, GroupMemberInfo, MessageElement, Peer, PostDataSendMsg, SendMessage, User} from "./types"; import {Group, GroupMemberInfo, MessageElement, Peer, PostDataSendMsg, SendMessage, User} from "./types";
declare var LLAPI: { declare var LLAPI: {
on(event: "new-messages", callback: (data: MessageElement[]) => void): void; on(event: "new-messages", callback: (data: MessageElement[]) => void): void;
on(event: "context-msg-menu", callback: (event: any, target: any, msgIds:any) => void): void; on(event: "context-msg-menu", callback: (event: any, target: any, msgIds:any) => void): void;

View File

@ -1,14 +1,9 @@
// 运行在 Electron 主进程 下的插件入口 // 运行在 Electron 主进程 下的插件入口
import {Group, PostDataSendMsg, User} from "./types";
// type {Group, PostDataSendMsg, User} = import( "./types");
// type Group = import( "./types").Group;
// type PostDataSendMsg = import( "./types").PostDataSendMsg;
// type User = import( "./types").User;
const express = require("express")
const {ipcMain, webContents} = require('electron');
const fs = require('fs'); const fs = require('fs');
import {ipcMain, webContents} from 'electron';
const express = require("express");
import {Group, PostDataSendMsg, User} from "./types";
const CHANNEL_SEND_MSG = "llonebot_sendMsg" const CHANNEL_SEND_MSG = "llonebot_sendMsg"
@ -237,7 +232,13 @@ function onBrowserWindowCreated(window: any, plugin: any) {
// 这两个函数都是可选的 // 这两个函数都是可选的
module.exports = { // module.exports = {
onLoad, // onLoad,
onBrowserWindowCreated // onBrowserWindowCreated
// }
// function onLoad(plugin: any) {
//
// }
export {
onLoad, onBrowserWindowCreated
} }

View File

@ -116,7 +116,7 @@ async function forwardMessage(message: MessageElement) {
data: {}, data: {},
type: "unknown" type: "unknown"
} }
if (element.textElement?.atType == 2) { if (element.textElement?.atType == AtType.atUser) {
message_data["type"] = "at" message_data["type"] = "at"
if (element.textElement.atUid != "0") { if (element.textElement.atUid != "0") {
message_data["data"]["mention"] = element.textElement.atUid message_data["data"]["mention"] = element.textElement.atUid
@ -192,7 +192,7 @@ async function listenSendMessage(postData: PostDataSendMsg) {
if (message.type == "at"){ if (message.type == "at"){
// @ts-ignore // @ts-ignore
message.type = "text" message.type = "text"
message.atType = 2 message.atType = AtType.atUser
let atUid = message.data?.qq || message.atUid let atUid = message.data?.qq || message.atUid
let group = await getGroup(postData.params.group_id) let group = await getGroup(postData.params.group_id)
let atMember = group.members.find(member => member.uin == atUid) let atMember = group.members.find(member => member.uin == atUid)

View File

@ -1,13 +0,0 @@
{
"compilerOptions": {
"target": "es6",
"module": "es6",
"outDir": "../dist",
"strict": false,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"moduleResolution": "node"
},
"files": ["renderer.ts"],
// "exclude": ["main.ts", "preload.ts"]
}

View File

@ -5,12 +5,13 @@
"outDir": "./dist", "outDir": "./dist",
"strict": false, "strict": false,
"esModuleInterop": true, "esModuleInterop": true,
"allowJs": true,
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,
"moduleResolution": "node", "moduleResolution": "node",
// "declaration": false
}, },
"files": ["src/main.ts", "src/preload.ts"], "include": ["src/*"],
"exclude": [ "exclude": [
"node_modules" "node_modules",
"src/types.ts"
] ]
} }

View File

@ -1,16 +0,0 @@
import { defineConfig } from 'vite';
import { resolve } from 'path';
export default defineConfig({
build: {
rollupOptions: {
input: {
// renderer: resolve(__dirname, 'dist/renderer.js') // 入口文件的路径
renderer: resolve(__dirname, 'src/renderer.ts') // 入口文件的路径
},
output: {
entryFileNames: '[name].js', // 打包后的文件名
}
}
}
});

60
webpack.base.config.js Normal file
View File

@ -0,0 +1,60 @@
// import path from "path";
const path = require('path');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
// target: 'node',
entry: {
// main: './src/main.ts',
// preload: './src/preload.ts'
}, // 入口文件路径
target: "node",
output: { // 输出文件配置
path: path.resolve(__dirname, 'dist'), // 输出目录路径
filename: '[name].js', // 输出文件名
// libraryTarget: "commonjs2",
// chunkFormat: "commonjs",
},
externals: [
// "express",
"electron", "fs"],
experiments: {
// outputModule: true
},
resolve: {
extensions: ['.js', '.ts']
},
module: { // 模块配置
rules: [ // 模块规则
{
test: /\.js$/, // 匹配.js文件
exclude: /node_modules/, // 排除node_modules目录
use: { // 使用的loader
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
}
}
},
{
test: /\.ts$/, // 匹配.ts文件
// exclude: /node_modules/, // 排除node_modules目录
use: { // 使用的loader
loader: 'ts-loader',
options: {
// configFile: 'src/tsconfig.json'
}
}
}
]
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
extractComments: false,
}),
],
}
}

View File

@ -1,31 +0,0 @@
const path = require('path');
module.exports = {
target: 'node',
entry: './src/renderer.ts', // 入口文件路径
output: { // 输出文件配置
path: path.resolve(__dirname, 'dist'), // 输出目录路径
filename: 'bundle.js' // 输出文件名
},
module: { // 模块配置
rules: [ // 模块规则
{
test: /\.js$/, // 匹配.js文件
exclude: /node_modules/, // 排除node_modules目录
use: { // 使用的loader
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
},
{
test: /\.ts$/, // 匹配.ts文件
exclude: /node_modules/, // 排除node_modules目录
use: { // 使用的loader
loader: 'ts-loader'
}
}
]
}
}

10
webpack.main.config.js Normal file
View File

@ -0,0 +1,10 @@
const baseConfig = require('./webpack.base.config.js')
baseConfig.target = 'electron-main'
baseConfig.entry = {
main: './src/main.ts',
}
baseConfig.output.libraryTarget = 'commonjs2'
baseConfig.output.chunkFormat = 'commonjs'
module.exports = baseConfig

View File

@ -0,0 +1,9 @@
const baseConfig = require('./webpack.base.config.js')
baseConfig.target = 'electron-preload'
baseConfig.entry = {
preload: './src/preload.ts',
}
baseConfig.output.chunkFormat = 'commonjs'
baseConfig.output.libraryTarget = 'commonjs2'
module.exports = baseConfig

View File

@ -0,0 +1,11 @@
const baseConfig = require('./webpack.base.config.js')
baseConfig.target = 'electron-renderer'
baseConfig.entry = {
renderer: './src/renderer.ts',
}
baseConfig.output.libraryTarget = 'module'
baseConfig.output.chunkFormat = 'module'
baseConfig.experiments.outputModule = true
module.exports = baseConfig