Skip to content

Commit

Permalink
feat: 升级got的版本
Browse files Browse the repository at this point in the history
  • Loading branch information
Haochen Duan committed Aug 26, 2024
1 parent 4ad832f commit c05c22f
Show file tree
Hide file tree
Showing 9 changed files with 137 additions and 12 deletions.
2 changes: 1 addition & 1 deletion app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"chrome-launcher": "^0.15.2",
"chrome-remote-interface": "^0.33.0",
"fs-extra": "^11.2.0",
"got": "^11.8.6",
"got": "^14.4.2",
"iconv-lite": "^0.6.3",
"js-yaml": "^4.1.0",
"node-schedule": "^2.1.1",
Expand Down
2 changes: 1 addition & 1 deletion packages/NIMTest/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"version": "0.0.0",
"dependencies": {
"@yxim/nim-web-sdk": "^9.16.1",
"got": "^14.0.0",
"got": "^14.4.2",
"lodash": "^4.17.21",
"playwright-core": "^1.40.1"
}
Expand Down
21 changes: 21 additions & 0 deletions packages/got-cjs/build.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import path from 'node:path';
import { merge } from 'webpack-merge';
import { metaHelper } from '@sweet-milktea/utils';
import { require, webpackBuild, webpackNodeDefaultCjsBuildConfig } from '../../scripts/utils.mjs';

export const { __dirname } = metaHelper(import.meta.url);

/**
* webpack打包
*/
await webpackBuild(merge(webpackNodeDefaultCjsBuildConfig, {
mode: 'development',
entry: {
index: [require.resolve('got')]
},
output: {
path: path.join(__dirname, 'dist'),
filename: 'index.cjs'
},
devtool: 'source-map'
}));
10 changes: 10 additions & 0 deletions packages/got-cjs/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "@qqtools/got-cjs",
"version": "0.0.0",
"main": "dist/index.cjs",
"type": "commonjs",
"scripts": {
"build": "npm run clean && node build.mjs",
"clean": "rimraf ./dist"
}
}
2 changes: 1 addition & 1 deletion packages/qqtools/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
},
"optionalDependencies": {
"fs-extra": "^11.2.0",
"got": "^11.8.6",
"got": "^14.4.2",
"iconv-lite": "^0.6.3",
"js-yaml": "^4.1.0",
"node-schedule": "^2.1.1",
Expand Down
7 changes: 5 additions & 2 deletions packages/qqtools/sweet.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ function srcPath(p: string): string {

const reactCompiler: { sources(p: string): boolean } = {
sources(p: string): boolean {
return /48tools[\\/]src[\\/].+\.tsx/.test(p);
return /qqtools[\\/]src[\\/].+\.tsx/.test(p);
}
};

Expand All @@ -95,7 +95,10 @@ export default function(info: object): { [key: string]: any } {
[require.resolve(path.join(__dirname, '../babel-plugin-delay-require')), {
moduleNames: externalsName,
idle: false,
mountToGlobalThis: true
mountToGlobalThis: true,
replaceModuleName: isDev ? {
got: '@qqtools/got-cjs'
} : undefined
}]
].filter(Boolean);

Expand Down
29 changes: 28 additions & 1 deletion scripts/postInstall.mjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import path from 'node:path';
import fsP from 'node:fs/promises';
import { cwd } from './utils.mjs';
import { cwd, command, npm } from './utils.mjs';

const nodeModules = path.join(cwd, 'node_modules');

Expand All @@ -18,12 +18,39 @@ async function replaceWebsocket(fp, ws) {
await fsP.writeFile(filePath, newFile, { encoding: 'utf8' });
}

/* 修复rc-util */
async function fixRcUtil() {
const rcUtilPath = path.join(nodeModules, 'rc-util/es/React/render.js');
const file = await fsP.readFile(rcUtilPath, { encoding: 'utf8' });

if (file.includes('/* rc-util fixed */')) return;

const newFile = file.replace("import * as ReactDOM from 'react-dom';", `import * as ReactDOM from 'react-dom';
import * as ReactDOMClient from 'react-dom/client';`)
.replace('var fullClone = _objectSpread({}, ReactDOM);', 'var fullClone = _objectSpread({}, ReactDOM, ReactDOMClient);')
.replace('reactRender(node, container);', '/* rc-util fixed */ try { reactRender(node, container); } catch {}');

await fsP.writeFile(rcUtilPath, newFile, { encoding: 'utf8' });
}

/* 编译got cjs */
async function buildCjsPackage(packageName) {
await command(npm, ['run', 'build'], path.join(cwd, 'packages', packageName));
}

/* 执行postinstall脚本 */
async function postInstall() {
// 替换window.WebSocket
await Promise.all([
replaceWebsocket('nim-web-sdk-ng/dist/NIM_BROWSER_SDK.js', 'HACK_INTERCEPTS_SEND_NIM_Websocket'),
replaceWebsocket('nim-web-sdk-ng/dist/QCHAT_BROWSER_SDK.js', 'HACK_INTERCEPTS_SEND_QCHAT_Websocket')
]);

// 修复rc-util
await fixRcUtil();

// 编译got cjs
await buildCjsPackage('got-cjs');
}

postInstall();
34 changes: 29 additions & 5 deletions scripts/taskfile.mjs
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import process from 'node:process';
import path from 'node:path';
import { createRequire } from 'node:module';
import ncc from '@vercel/ncc';
import fse from 'fs-extra';
import { rimraf } from 'rimraf';
import { merge } from 'webpack-merge';
import { requireJson } from '@sweet-milktea/utils';
import { appDir } from './utils.mjs';
import { require, appDir, webpackBuild, webpackNodeDefaultCjsBuildConfig } from './utils.mjs';
import packageJson from '../app/package.json' assert { type: 'json' };

const require = createRequire(import.meta.url);

const argv = process.argv.slice(2);

/* 文件路径 */
Expand All @@ -23,12 +21,33 @@ const appNodeModules = path.join(appDir, 'node_modules'); // app文件夹的node
async function nccBuild(input, output) {
const { code } = await ncc(input, {
minify: true,
target: 'es2020',
externals: ['electron']
});

await fse.outputFile(output, code);
}

/**
* webpack编译
* @param { string } input - 文件路径
* @param { string } output - 输出目录
*/
async function webpackBuildPackage(input, output) {
const parseResult = path.parse(output);

await webpackBuild(merge(webpackNodeDefaultCjsBuildConfig, {
mode: 'production',
entry: {
index: [input]
},
output: {
path: parseResult.dir,
filename: parseResult.base
}
}), true);
}

/**
* 根据依赖名称生成文件
* @param { string } dependenciesName - 依赖名称
Expand All @@ -39,7 +58,12 @@ async function createFilesByDependenciesName(dependenciesName) {
.dir.split(/node_modules/)[0], 'node_modules', dependenciesName); // 模块在node_modules中的原位置

await fse.ensureDir(dependenciesDir); // 创建目录
await nccBuild(require.resolve(dependenciesName), path.join(dependenciesDir, 'index.js')); // 编译文件

if (dependenciesName === 'got') {
await webpackBuildPackage(require.resolve(dependenciesName), path.join(dependenciesDir, 'index.js'));
} else {
await nccBuild(require.resolve(dependenciesName), path.join(dependenciesDir, 'index.js')); // 编译文件
}

const depPackageJson = await requireJson(path.join(dependenciesNodeModulesDir, 'package.json'));

Expand Down
42 changes: 41 additions & 1 deletion scripts/utils.mjs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import path from 'node:path';
import process from 'node:process';
import { spawn } from 'node:child_process';
import { createRequire } from 'node:module';
import webpack from 'webpack';
import { metaHelper } from '@sweet-milktea/utils';

export const require = createRequire(import.meta.url);
export const { __dirname } = metaHelper(import.meta.url);

// 定义文件位置
Expand Down Expand Up @@ -79,4 +82,41 @@ export function command(cmd, args, cwdPath) {
});
}

export const npm = isWindows ? 'npm.cmd' : 'npm';
export const npm = isWindows ? 'npm.cmd' : 'npm';

/* webpack编译 */
export const webpackNodeDefaultCjsBuildConfig = {
output: {
library: { type: 'commonjs' },
globalObject: 'globalThis'
},
externalsPresets: {
node: true,
electron: true
},
target: ['node', 'node20'],
performance: { hints: false },
node: {
__filename: true,
__dirname: true
}
};

export function webpackBuild(webpackConig, onlyDisplayError) {
function webpackRunningCallback(err, stats) {
if (err) {
console.error(err);
} else {
!onlyDisplayError && console.log(stats.toString({
colors: true
}));
}
}

return new Promise((resolve, reject) => {
const compiler = webpack(webpackConig);

compiler.hooks.done.tap('webpack-build-done', resolve);
compiler.run(webpackRunningCallback);
});
}

0 comments on commit c05c22f

Please sign in to comment.