Skip to content

Commit a925a0a

Browse files
author
winjo
committed
build: 修复 tsc 构建 cdn 环境变量替换
1 parent 6b0b901 commit a925a0a

3 files changed

Lines changed: 57 additions & 36 deletions

File tree

scripts/build.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const args = require('minimist')(process.argv.slice(2));
44
const glob = require('glob');
55
const fse = require('fs-extra');
66
const { invoke, exec } = require('./utils/utils');
7+
const { replaceWorkerAndWebviewAssets } = require('./utils/replace');
78

89
invoke(async () => {
910
const scope = args.scope || 'all';
@@ -15,6 +16,7 @@ invoke(async () => {
1516
const watch = args.w || args.watch ? '--watch' : '';
1617
await exec(`npx tsc --build packages/tsconfig.build.json ${watch}`);
1718
signale.success('编译成功');
19+
1820
signale.pending('复制非 ts 资源');
1921
const cwd = path.join(__dirname, '../packages');
2022
const files = glob.sync('*/src/**/*.@(less)', { cwd, nodir: true });
@@ -26,6 +28,10 @@ invoke(async () => {
2628
await fse.copyFile(from, to);
2729
}
2830
signale.success('复制成功');
31+
32+
signale.pending('替换 extWorkerHost 和 webviewEndpoint cdn 资源');
33+
await replaceWorkerAndWebviewAssets();
34+
signale.success('替换成功');
2935
} catch (err) {
3036
signale.error('编译失败', err);
3137
throw err;

scripts/release.js

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -108,24 +108,8 @@ invoke(async () => {
108108

109109
step('构建所有 packages...'); // --no-build 跳过
110110
if (args.build !== false) {
111-
const configPath = path.resolve(__dirname, '..', 'packages/toolkit/define.json');
112-
if (!fse.existsSync(configPath)) {
113-
throw new Error('请先运行 build-assets 构建资源');
114-
}
115111
await exec('yarn build');
116-
117-
step('注入 cdn 资源');
118-
const targetFile = path.resolve(__dirname, '..', 'packages/alex/lib/api/createApp.js');
119-
const { code, result } = replace(
120-
await fse.readFile(targetFile, 'utf8'),
121-
await fse.readJSON(configPath)
122-
);
123-
if (result) {
124-
await fse.writeFile(targetFile, code);
125-
console.log('(DONE)');
126-
} else {
127-
console.log('(SKIP)');
128-
}
112+
console.log('(DONE)');
129113
} else {
130114
console.log('(SKIP)');
131115
}
@@ -179,25 +163,6 @@ async function updatePackage(pkgRoot, version) {
179163
await fse.writeJSON(pkgPath, pkgJSON, { spaces: 2 });
180164
}
181165

182-
/**
183-
* @param {string} code
184-
* @param {object} replacement
185-
*/
186-
function replace(code, replacement) {
187-
const keys = Object.keys(replacement)
188-
.sort((a, b) => b.length - a.length)
189-
.map((str) => str.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&'));
190-
const pattern = new RegExp(`\\b(${keys.join('|')})\\b`, 'g');
191-
192-
let result = false;
193-
code = code.replace(pattern, (match) => {
194-
result = true;
195-
return JSON.stringify(replacement[match]);
196-
});
197-
198-
return { code, result };
199-
}
200-
201166
async function publishPackage(pkgName, version) {
202167
const pkgRoot = getPkgRoot(pkgName);
203168
const pkgPath = path.resolve(pkgRoot, 'package.json');

scripts/utils/replace.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* 类似 @rollup/plugin-replace,用于 tsc 阶段替换 env
3+
*/
4+
5+
const fse = require('fs-extra');
6+
const path = require('path');
7+
8+
/**
9+
* @param {string[]} files
10+
* @param {Record<string, string>} replacement
11+
*/
12+
exports.replace = (files, replacement) => {
13+
const keys = Object.keys(replacement)
14+
.sort((a, b) => b.length - a.length)
15+
.map((str) => str.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&'));
16+
const pattern = new RegExp(`\\b(${keys.join('|')})\\b`, 'g');
17+
18+
return Promise.all(
19+
files.map(async (file) => {
20+
let code = await fse.readFile(file, 'utf8');
21+
let result = false;
22+
code = code.replace(pattern, (match) => {
23+
result = true;
24+
return JSON.stringify(replacement[match]);
25+
});
26+
27+
if (result) {
28+
await fse.writeFile(file, code);
29+
}
30+
})
31+
);
32+
};
33+
34+
exports.replaceWorkerAndWebviewAssets = async () => {
35+
const configPath = path.resolve(__dirname, '..', '..', 'packages/toolkit/define.json');
36+
if (!fse.existsSync(configPath)) {
37+
throw new Error('请先运行 build-assets 构建资源');
38+
}
39+
40+
const targetFiles = [
41+
path.resolve(__dirname, '..', '..', 'packages/alex/lib/api/createApp.js'),
42+
path.resolve(__dirname, '..', '..', 'packages/alex/lib/api/createEditor.js'),
43+
];
44+
45+
if (!targetFiles.every((file) => fse.existsSync(file))) {
46+
throw new Error('请先运行 build 构建 lib');
47+
}
48+
49+
return exports.replace(targetFiles, await fse.readJSON(configPath));
50+
};

0 commit comments

Comments
 (0)