chore: add plugin create node_modules symlink in build stage

pull/105/merge
moonrailgun 2 years ago
parent 3610b796ec
commit be8a0b3379

@ -1340,6 +1340,9 @@ importers:
'@types/bluebird':
specifier: ^3.5.36
version: 3.5.36
'@types/glob':
specifier: ^8.1.0
version: 8.1.0
accepts:
specifier: ^1.3.8
version: 1.3.8
@ -1367,6 +1370,9 @@ importers:
execa:
specifier: '5'
version: 5.1.1
glob:
specifier: ^10.3.3
version: 10.3.3
got:
specifier: 11.8.3
version: 11.8.3
@ -6838,6 +6844,18 @@ packages:
react: 18.2.0
dev: false
/@isaacs/cliui@8.0.2:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
dependencies:
string-width: 5.1.2
string-width-cjs: /string-width@4.2.3
strip-ansi: 7.0.1
strip-ansi-cjs: /strip-ansi@6.0.1
wrap-ansi: 8.1.0
wrap-ansi-cjs: /wrap-ansi@7.0.0
dev: false
/@istanbuljs/load-nyc-config@1.1.0:
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
engines: {node: '>=8'}
@ -7970,6 +7988,13 @@ packages:
- supports-color
dev: true
/@pkgjs/parseargs@0.11.0:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
requiresBuild: true
dev: false
optional: true
/@pmmmwh/react-refresh-webpack-plugin@0.5.7(react-refresh@0.11.0)(webpack@5.75.0):
resolution: {integrity: sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q==}
engines: {node: '>= 10.13'}
@ -12042,7 +12067,6 @@ packages:
dependencies:
'@types/minimatch': 5.1.2
'@types/node': 18.11.9
dev: true
/@types/graceful-fs@4.1.6:
resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==}
@ -12293,7 +12317,6 @@ packages:
/@types/minimatch@5.1.2:
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
dev: true
/@types/minimist@1.2.2:
resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
@ -19206,6 +19229,14 @@ packages:
signal-exit: 3.0.7
dev: true
/foreground-child@3.1.1:
resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
engines: {node: '>=14'}
dependencies:
cross-spawn: 7.0.3
signal-exit: 4.0.2
dev: false
/forever-agent@0.6.1:
resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
dev: true
@ -19699,6 +19730,18 @@ packages:
/glob-to-regexp@0.4.1:
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
/glob@10.3.3:
resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==}
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
dependencies:
foreground-child: 3.1.1
jackspeak: 2.2.2
minimatch: 9.0.3
minipass: 7.0.2
path-scurry: 1.10.1
dev: false
/glob@7.1.6:
resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
dependencies:
@ -21765,6 +21808,15 @@ packages:
iterate-iterator: 1.0.2
dev: true
/jackspeak@2.2.2:
resolution: {integrity: sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==}
engines: {node: '>=14'}
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
dev: false
/jake@10.8.5:
resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==}
engines: {node: '>=10'}
@ -23287,6 +23339,11 @@ packages:
resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
engines: {node: '>=8'}
/lru-cache@10.0.0:
resolution: {integrity: sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==}
engines: {node: 14 || >=16.14}
dev: false
/lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
dependencies:
@ -24175,6 +24232,13 @@ packages:
dependencies:
brace-expansion: 2.0.1
/minimatch@9.0.3:
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
brace-expansion: 2.0.1
dev: false
/minimist-options@4.1.0:
resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
engines: {node: '>= 6'}
@ -24248,6 +24312,11 @@ packages:
engines: {node: '>=8'}
dev: true
/minipass@7.0.2:
resolution: {integrity: sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==}
engines: {node: '>=16 || 14 >=14.17'}
dev: false
/minizlib@2.1.2:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
engines: {node: '>= 8'}
@ -25912,6 +25981,14 @@ packages:
path-root-regex: 0.1.2
dev: false
/path-scurry@1.10.1:
resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
lru-cache: 10.0.0
minipass: 7.0.2
dev: false
/path-to-regexp@0.1.7:
resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
@ -30349,6 +30426,11 @@ packages:
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
/signal-exit@4.0.2:
resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==}
engines: {node: '>=14'}
dev: false
/simple-git@3.16.1:
resolution: {integrity: sha512-xzRxMKiy1zEYeHGXgAzvuXffDS0xgsq07Oi4LWEEcVH29vLpcZ2tyQRWyK0NLLlCVaKysZeem5tC1qHEOxsKwA==}
dependencies:

@ -42,6 +42,7 @@
"@typegoose/typegoose": "9.3.1",
"@types/blessed": "^0.1.19",
"@types/bluebird": "^3.5.36",
"@types/glob": "^8.1.0",
"accepts": "^1.3.8",
"bcryptjs": "^2.4.3",
"bluebird": "^3.7.2",
@ -51,6 +52,7 @@
"ejs": "^3.1.6",
"es6-error": "^4.1.1",
"execa": "5",
"glob": "^10.3.3",
"got": "11.8.3",
"i18next": "^20.3.5",
"ioredis": "^4.27.6",

@ -1,6 +1,9 @@
import ts from 'typescript';
import fs from 'fs-extra';
import ora from 'ora';
import { glob } from 'glob';
import path from 'path';
import execa from 'execa';
async function buildTailchatServer() {
const spinner = ora({
@ -8,11 +11,11 @@ async function buildTailchatServer() {
});
try {
spinner.start('开始编译');
spinner.start('Start compiling');
await fs.remove('./dist');
spinner.info('正在编译TS代码');
spinner.info('Compiling TS code');
await compileTsCode();
spinner.info('正在移动静态资源文件');
spinner.info('Moving static resource files');
await Promise.all([
fs.copy('./public', './dist/public', { recursive: true }),
fs.copy('./locales', './dist/locales', { recursive: true }),
@ -24,10 +27,27 @@ async function buildTailchatServer() {
),
]);
spinner.succeed('编译完成');
if (process.platform !== 'win32' || (await isAdmin())) {
spinner.info('Building plugin dependent symlink');
const nodeModulesList = await glob('./plugins/*/node_modules/*');
for (const item of nodeModulesList) {
const src = path.resolve(__dirname, '../', item);
const dest = path.resolve(__dirname, '../dist', item);
spinner.text = `Building Symlink: ${src} -> ${dest}`;
await fs.createSymlink(src, dest, 'dir');
}
} else {
spinner.warn(
'You are run command in windows without admin permit, create symlink will be skip'
);
}
spinner.succeed('Compiled!');
} catch (e) {
console.error(e);
spinner.fail('编译失败');
spinner.fail('Compilation failed!');
}
}
@ -96,3 +116,33 @@ function compileTsCode(): Promise<void> {
return compile(fileNames, options);
}
/**
* check is window admin
*/
async function isAdmin() {
if (process.platform !== 'win32') {
return false;
}
try {
// https://stackoverflow.com/a/21295806/1641422
await execa('fsutil', ['dirty', 'query', process.env.systemdrive]);
return true;
} catch (error) {
if (error.code === 'ENOENT') {
return testFltmc();
}
return false;
}
}
async function testFltmc() {
try {
await execa('fltmc');
return true;
} catch {
return false;
}
}

Loading…
Cancel
Save