Get codicons from node module (#289705)

* Revert "Revert codicon change (#289683)"

This reverts commit de6f371a92.

* Always run postinstall

* Two more places

* Move codicon copy into compilation

* Fix pipelines

* Update readme

* Fix watch task

* Move copy codicons

* MIssed some spots

* Error handing

* Fix path
This commit is contained in:
Alex Ross
2026-01-26 12:13:48 +01:00
committed by GitHub
parent 197989bf5d
commit 10abebd051
11 changed files with 65 additions and 4 deletions

1
.gitignore vendored
View File

@@ -6,6 +6,7 @@ node_modules/
.build/
.vscode/extensions/**/out/
extensions/**/dist/
src/vs/base/browser/ui/codicons/codicon/codicon.ttf
/out*/
/extensions/**/out/
build/node_modules

View File

@@ -19,9 +19,9 @@ function makeCompileBuildTask(disableMangle: boolean) {
}
// Local/PR compile, including nls and inline sources in sourcemaps, minification, no mangling
export const compileBuildWithoutManglingTask = task.define('compile-build-without-mangling', makeCompileBuildTask(true));
export const compileBuildWithoutManglingTask = task.define('compile-build-without-mangling', task.series(compilation.copyCodiconsTask, makeCompileBuildTask(true)));
gulp.task(compileBuildWithoutManglingTask);
// CI compile, including nls and inline sources in sourcemaps, mangling, minification, for build
export const compileBuildWithManglingTask = task.define('compile-build-with-mangling', makeCompileBuildTask(false));
export const compileBuildWithManglingTask = task.define('compile-build-with-mangling', task.series(compilation.copyCodiconsTask, makeCompileBuildTask(false)));
gulp.task(compileBuildWithManglingTask);

View File

@@ -36,6 +36,14 @@ const BUNDLED_FILE_HEADER = [
].join('\n');
const extractEditorSrcTask = task.define('extract-editor-src', () => {
// Ensure codicon.ttf is copied from node_modules (needed when node_modules is cached and postinstall doesn't run)
const codiconSource = path.join(root, 'node_modules', '@vscode', 'codicons', 'dist', 'codicon.ttf');
const codiconDest = path.join(root, 'src', 'vs', 'base', 'browser', 'ui', 'codicons', 'codicon', 'codicon.ttf');
if (fs.existsSync(codiconSource)) {
fs.mkdirSync(path.dirname(codiconDest), { recursive: true });
fs.copyFileSync(codiconSource, codiconDest);
}
const apiusages = monacoapi.execute().usageContent;
const extrausages = fs.readFileSync(path.join(root, 'build', 'monaco', 'monaco.usage.recipe')).toString();
standalone.extractEditor({

View File

@@ -31,10 +31,10 @@ const transpileClientTask = task.define('transpile-client', task.series(util.rim
gulp.task(transpileClientTask);
// Fast compile for development time
const compileClientTask = task.define('compile-client', task.series(util.rimraf('out'), compileApiProposalNamesTask, compileTask('src', 'out', false)));
const compileClientTask = task.define('compile-client', task.series(util.rimraf('out'), compilation.copyCodiconsTask, compileApiProposalNamesTask, compileTask('src', 'out', false)));
gulp.task(compileClientTask);
const watchClientTask = task.define('watch-client', task.series(util.rimraf('out'), task.parallel(watchTask('out', false), watchApiProposalNamesTask)));
const watchClientTask = task.define('watch-client', task.series(util.rimraf('out'), task.parallel(watchTask('out', false), watchApiProposalNamesTask, compilation.watchCodiconsTask)));
gulp.task(watchClientTask);
// All

View File

@@ -356,3 +356,34 @@ export const watchApiProposalNamesTask = task.define('watch-api-proposal-names',
.pipe(util.debounce(task))
.pipe(gulp.dest('src'));
});
// Codicons
const root = path.dirname(path.dirname(import.meta.dirname));
const codiconSource = path.join(root, 'node_modules', '@vscode', 'codicons', 'dist', 'codicon.ttf');
const codiconDest = path.join(root, 'src', 'vs', 'base', 'browser', 'ui', 'codicons', 'codicon', 'codicon.ttf');
function copyCodiconsImpl() {
try {
if (fs.existsSync(codiconSource)) {
fs.mkdirSync(path.dirname(codiconDest), { recursive: true });
fs.copyFileSync(codiconSource, codiconDest);
} else {
fancyLog(ansiColors.red('[codicons]'), `codicon.ttf not found in node_modules. Please run 'npm install' to install dependencies.`);
}
} catch (e) {
fancyLog(ansiColors.red('[codicons]'), `Error copying codicon.ttf: ${e}`);
}
}
export const copyCodiconsTask = task.define('copy-codicons', () => {
copyCodiconsImpl();
return Promise.resolve();
});
gulp.task(copyCodiconsTask);
export const watchCodiconsTask = task.define('watch-codicons', () => {
copyCodiconsImpl();
return watch('node_modules/@vscode/codicons/dist/**', { readDelay: 200 })
.on('data', () => copyCodiconsImpl());
});
gulp.task(watchCodiconsTask);

7
package-lock.json generated
View File

@@ -15,6 +15,7 @@
"@microsoft/1ds-post-js": "^3.2.13",
"@parcel/watcher": "^2.5.6",
"@types/semver": "^7.5.8",
"@vscode/codicons": "^0.0.44",
"@vscode/deviceid": "^0.1.1",
"@vscode/iconv-lite-umd": "0.7.1",
"@vscode/native-watchdog": "^1.4.6",
@@ -2945,6 +2946,12 @@
"win32"
]
},
"node_modules/@vscode/codicons": {
"version": "0.0.44",
"resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.44.tgz",
"integrity": "sha512-F7qPRumUK3EHjNdopfICLGRf3iNPoZQt+McTHAn4AlOWPB3W2kL4H0S7uqEqbyZ6rCxaeDjpAn3MCUnwTu/VJQ==",
"license": "CC-BY-4.0"
},
"node_modules/@vscode/deviceid": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@vscode/deviceid/-/deviceid-0.1.4.tgz",

View File

@@ -77,6 +77,7 @@
"@microsoft/1ds-post-js": "^3.2.13",
"@parcel/watcher": "^2.5.6",
"@types/semver": "^7.5.8",
"@vscode/codicons": "^0.0.44",
"@vscode/deviceid": "^0.1.1",
"@vscode/iconv-lite-umd": "0.7.1",
"@vscode/native-watchdog": "^1.4.6",

View File

@@ -10,6 +10,7 @@
"dependencies": {
"@microsoft/1ds-core-js": "^3.2.13",
"@microsoft/1ds-post-js": "^3.2.13",
"@vscode/codicons": "^0.0.44",
"@vscode/iconv-lite-umd": "0.7.1",
"@vscode/tree-sitter-wasm": "^0.3.0",
"@vscode/vscode-languagedetection": "1.0.21",
@@ -71,6 +72,12 @@
"resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.9.tgz",
"integrity": "sha512-n1VPsljTSkthsAFYdiWfC+DKzK2WwcRp83Y1YAqdX552BstvsDjft9YXppjUzp11BPsapDoO1LDgrDB0XVsfNQ=="
},
"node_modules/@vscode/codicons": {
"version": "0.0.44",
"resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.44.tgz",
"integrity": "sha512-F7qPRumUK3EHjNdopfICLGRf3iNPoZQt+McTHAn4AlOWPB3W2kL4H0S7uqEqbyZ6rCxaeDjpAn3MCUnwTu/VJQ==",
"license": "CC-BY-4.0"
},
"node_modules/@vscode/iconv-lite-umd": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.1.tgz",

View File

@@ -5,6 +5,7 @@
"dependencies": {
"@microsoft/1ds-core-js": "^3.2.13",
"@microsoft/1ds-post-js": "^3.2.13",
"@vscode/codicons": "^0.0.44",
"@vscode/iconv-lite-umd": "0.7.1",
"@vscode/tree-sitter-wasm": "^0.3.0",
"@vscode/vscode-languagedetection": "1.0.21",

View File

@@ -0,0 +1,5 @@
# Codicons
## Where does the codicon.ttf come from?
It is added via the `@vscode/codicons` npm package, then copied to this directory during compile time.