ISSUE - kimhanui/vscode-Nyan-Cat GitHub Wiki

image

In my case: WSL2

C:\Users\๊น€ํ•˜๋Šฌ\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\code\electron-browser\workbench\workbench.html

The reason (maybe)is...

image

WSL2์—์„œ home dir
image

์•Œ๊ฒŒ๋œ ์ !!

vscode extension์˜ ์†Œ์Šค ํŒŒ์ผ์€ OS๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์ €์žฅ๋˜๋Š”๋ฐ WSL2๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š”,

  • ํŒจ๋„ ๋“ฑ UI์— ๊ด€ํ•œ extension์€ ์œˆ๋„์šฐ์—, ์ด๋ฒคํŠธ๋‚˜ ๋กœ์ง์— ๊ด€ํ•œ ๊ฑด ๋ฆฌ๋ˆ…์Šค์— ์„ค์น˜ํ•œ๋‹ค๋Š” ๊ฒƒ ๊ฐ™์•„ ์œˆ๋„์šฐ์ชฝ๋งŒ ๋ดค์—ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ Nyan cat์˜ ๊ฒฝ์šฐ : ์œˆ๋„์šฐ, ๋ฆฌ๋ˆ…์Šค ๋‘˜ ๋‹ค์— ์„ค์น˜๋ผ์žˆ์—ˆ๋‹ค. (์ด๊ฒŒ ๊ฐ€์žฅ ํฐ ์ˆ˜ํ™•)
  • WSL์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ extension์„ ๋‹ค์šด ๋ฐ›์œผ๋ฉด ์•„๋ž˜ ๋‘ ๊ฒฝ๋กœ์— ๋‹ค ์„ค์น˜๋จ์„ ์ฃผ์˜ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
    ์œˆ๋„์šฐ: User/kimhanui/.vscode/extension/, ๋ฆฌ๋ˆ…์Šค: ~/.vscode-server/extension/

๊ทธ๋ž˜์„œ ์ง€๊ธˆ๊นŒ์ง€ WSL2๋ฅผ ์“ฐ๋ฉด์„œ ์–ด๋– ํ•œ ์ด๋ฒคํŠธ๋„ ๋ฐ›์„ ์ˆ˜ ์—†์—ˆ๋˜๊ฒŒ ์ˆ˜์ •๋ผ์•ผ ํ•  ๋ถ€๋ถ„๋“ค์ด ์œˆ๋„์šฐ์ชฝ extension ์†Œ์Šค์—์„œ๋งŒ ์ˆ˜์ •๋ผ์„œ ๊ทธ๋žฌ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

image
์ด ์‚ฌ์ง„์€ vscode ์ฐฝ ์„ธ๊ฐœ๋ฅผ ๊ฒน์ณ์„œ ํ•˜๋‹จ์˜ status bar๋งŒ ๋ณด์ด๊ฒŒ ํ•ด ๋†“์€ ๊ฒƒ์ธ๋ฐ, ์•„๋ž˜์„œ ๋ถ€ํ„ฐ ์œˆ๋„์šฐ ๊ฒฝ๋กœ์˜ extension์†Œ์Šค์˜ ์ฐฝ, ์ „์ž๋ฅผ ๋””๋ฒ„๊น…ํ•ด์„œ ๋„์šด ํ…Œ์ŠคํŠธ์ฐฝ(๋˜‘๊ฐ™์ด ์œˆ๋„์šฐ ๊ฒฝ๋กœ) WSL ๊ฒฝ๋กœ์˜ extension์†Œ์Šค์˜ ์ฐฝ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ฐฝ๋งŒ ( ^^ )ํ‘œ์‹œ๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” extension์†Œ์Šค๋ฅผ ์œˆ๋„์šฐ์ชฝ ๊ฒฝ๋กœ์—์„œ๋งŒ ์ˆ˜์ •ํ•ด์„œ ์œˆ๋„์šฐ์—์„œ ์—ฐ vscode๋งŒ ๋ฐ˜์˜๋ผ๋ณด์ธ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๋ฆฌ๋ˆ…์Šค ์ชฝ extension ์†Œ์Šค๋„ ์ˆ˜์ •ํ•œ๋‹ค๋ฉด( ^^ )`์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

image
์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ˜์˜๋œ ๋ฆฌ๋ˆ…์Šค ์ชฝ vscode ์ฐฝ

์—ฌ๊ธฐ์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ ์€

  1. ํŒจ๋„ ๋“ฑ UI์— ๊ด€ํ•œ extension์€ ์œˆ๋„์šฐ์— ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ,
    UI์— ๊ด€ํ•œ ๊ฒƒ์ด๋“  ์•„๋‹ˆ๋“  ์„ค์น˜ํ•˜๊ฒ ๋‹ค๊ณ  ์„ ํƒํ•œ OS์— ๋”ฐ๋ผ extension ์†Œ์Šค๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ  ๊ทธ ์†Œ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ extension์ด ์ ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. (extension ์„ค์น˜ํ•  ๋•Œ ๋กœ์ปฌ์— ์„ค์น˜ํ• ๊ฑด์ง€ WSL2์— ์„ค์น˜ํ• ๊ฑด์ง€ ์„ ํƒํ•˜๊ฒŒ ๋‚˜์˜จ๋‹ค. ๋‹ค ๊ทธ๋Ÿฐ๊ฑด ์•„๋‹˜)

    image
    ๋กœ์ปฌ์— ์„ค์น˜ํ•˜๋Š” ๋ฒ„ํŠผ๋งŒ ์žˆ์Œ
    image
    WSL์— ์„ค์น˜ํ•˜๋Š” ๋ฒ„ํŠผ๋งŒ ์žˆ์Œ

  2. ์ด์ œ ์ž‘์—…ํ•ด์•ผํ•  ๊ณต๊ฐ„์„ ์•Œ์•˜๋‹ค. ๋‚ด ๋กœ์ปฌ์— ์„ค์น˜ํ•œ extension์„ ์ˆ˜์ •ํ•˜๊ณ ์‹ถ์œผ๋ฉด ํ•ด๋‹น OS์˜ extension ์†Œ์ŠคํŒŒ์ผ์„ ์ฐพ์•„๊ฐ€๋ฉด๋˜๊ณ , ๋‚ด ๊ฒฝ์šฐ๋Š” WSL์„ ์‚ฌ์šฉํ•  ๋•Œ ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์•ผํ•˜๋ฏ€๋กœ ๋ฆฌ๋ˆ…์Šค ์ชฝ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„๊ฐ€๋ฉด ๋œ๋‹ค.

๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ

์ด์ œ ์†Œ์Šค ๋‚ด๋ถ€์—์„œ ๊ณ„์† ์˜์‹ฌ์ค‘์ด์—ˆ๋˜ htmlDirPath๋ฅผ ์ฐ์–ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
const htmlDirPath = path_1.normalize(${path_1.dirname(require.main.filename)}/vs/code/electron-browser/workbench);

๋กœ๊ทธ๋กœ ์ฐ์–ด๋ณด๋‹ˆ ์œ„ ๊ฐ’์€
/home/kimhanui/.vscode-server/bin/08a217c4d27a02a5bcde898fd7981bda5b49391b/out/vs/code/electron-browser/workbench์ด์—ˆ๊ณ 
๋’ค์— ๋ถ™์€ /vs/code/electron-browser/workbench ๋Š” ์œˆ๋„์šฐ ์ชฝ์—์„œ vscode๋ฅผ ์„ค์น˜ํ•˜๋ฉด์„œ ์ƒ๊ธด ๊ฒฝ๋กœ๋กœ ๋ณด์ด๋Š”๋ฐ
Nyan-cat์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ๊ฒฝ๋กœ์— ์ ‘๊ทผํ•˜๋ ค๋Š” ์ด์œ ๋Š” ๋ญ”๊ฐ€ UI๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•จ์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์–ด์จ‹๋“  ์œˆ๋„์šฐ์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•ด์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋’ค์— /vs/code/electron-browser/workbench๊ฐ€ ๋ถ™๋Š” ๊ฒฝ๋กœ์˜ full path๋Š”
C:\Users\๊น€ํ•˜๋Šฌ\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\code\electron-browser\workbench๋กœ

๊ฐœ๋ฐœ์ž๊ฐ€ ${path_1.dirname(require.main.filename)} ๋กœ ์ฐพ๊ณ ์ž ํ–ˆ๋˜ ๊ฒฝ๋กœ๋Š” C:\Users\๊น€ํ•˜๋Šฌ\AppData\Local\Programs\Microsoft VS Code\resources\app\out ์˜€๋Š”๋ฐ ๋กœ๊ทธ๋กœ ์ฐ์–ด๋ณด๋‹ˆ ๋ญ”๊ฐ€ ์ž˜๋ชป ์ฐพ์•„๊ฐ€๋Š” ๋“ฏ ํ–ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ „์— ๋ฆฌ๋ˆ…์Šค ๊ฒฝ๋กœ์—์„œ ๋””๋ฒ„๊น…ํ•  ๋•Œ ๋งŒ๋‚œ ์—๋Ÿฌ๋ฉ”์‹œ์ง€๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

image
ENOENT means โ€œNo such directory entryโ€
It's an abbreviation of Error NO ENTry (or Error NO ENTity), and can actually be used for more than files/directories. https://stackoverflow.com/questions/19902828/why-does-enoent-mean-no-such-file-or-directory
image ์—†๋Š” ๊ฒฝ๋กœ์ž„. ๋ญ”๊ฐ€ ์ž˜๋ชป ์ฐพ์•„์˜จ๊ฒŒ ๋งž๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

Directly ๋„์›€๋˜๋Š” ๊ฐ€์ด๋“œ

Nyan-cat์˜ ํ‚ค์›Œ๋“œ๋Š” workbench ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด์—ˆ๋‹ค.

vscode extending workbench: https://code.visualstudio.com/api/extension-capabilities/extending-workbench

์ด์ œ ๋ช…๋ น์–ด ํ˜ธ์ถœ๊นŒ์ง„ ์ž˜ ์ž‘๋™๋˜๋‹ˆ Nyan Cat์ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ๋งŒ ์•Œ์•„๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™์•„ css๋ฅผ ๋‹ด๋‹นํ•˜๋Š” nyan-cat.js ํŒŒ์ผ์„ ์ค‘๋‹จ์ ์„ ์ฐ์–ด ์‚ดํŽด๋ดค๋‹ค.
image

image

workbench.js์—์„œ ๋ฌธ์ œ ์žˆ๋Š” ๋ถ€๋ถ„

// add default trustedTypes-policy for logging and to workaround
// lib/platform limitations
window.trustedTypes?.createPolicy('default', {
	createHTML(value) {
		// see https://github.com/electron/electron/issues/27211
		// Electron webviews use a static innerHTML default value and
		// that isn't trusted. We use a default policy to check for the
		// exact value of that innerHTML-string and only allow that.
		if (value === '<!DOCTYPE html><style type="text/css">:host { display: flex; }</style>') { //<--์—ฌ๊ธฐ์„œ ์—๋Ÿฌ๋‚˜๋Š” ๋“ฏ ํ•˜๋‹ค
			return value;
		}

		throw new Error('UNTRUSTED html usage, default trusted types policy should NEVER be reached');
		// console.trace('UNTRUSTED html usage, default trusted types policy should NEVER be reached');
		// return value;
	}
});

<span>์ฒ˜๋ฆฌ๋ผ์„œ ์•„์ง ๋น„์–ด์žˆ์Œ

image
css ๋””๋ฒ„๊น…์‹œ์—” ๋””๋ฒ„๊น…์šฉ vscode ์ฐฝ ์˜†์— ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ๋ถ™์–ด์„œ ๋„์›Œ์ง„๋‹ค.

image

image

Ubuntu 18.04์—์„œ ๋””๋ฒ„๊น… ํ•  ๋•Œ!!

image

์•ž์— ๋ถ™๋Š” ๊ฒฝ๋กœ๋Š” ์ด๋žฌ๋‹ค: /usr/share/code/resources/app/out

๊ฒฝ๋กœ์— ์ ‘๊ทผํ•  ๊ถŒํ•œ์ด ์—†๋‹ค๋Š” ๊ฒƒ ๊ฐ™์•„

$ cd /usr/share/code/resources/app/out/
$ sudo chown -R <user-name> <directory-name>

๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ๋‹ˆ ์œ„ ๊ฒฝ๊ณ ๋Š” ์‚ฌ๋ผ์กŒ๋‹ค.


<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src 'self' https: data: blob: vscode-remote-resource:; media-src 'none'; frame-src 'self' vscode-webview: https://*.vscode-webview-test.com; object-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; connect-src 'self' https: ws:; font-src 'self' https: vscode-remote-resource:;">
		<meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'; trusted-types default TrustedFunctionWorkaround ExtensionScripts amdLoader cellRendererEditorText defaultWorkerFactory diffEditorWidget domLineBreaksComputer editorViewLayer diffReview extensionHostWorker insane notebookOutputRenderer safeInnerHtml standaloneColorizer tokenizeToString webNestedWorkerExtensionHost webWorkerExtensionHost;">
	</head>
	<body aria-label="">
<script id="NyanCatConfiguration">window.NyanCatConfiguration = {"backgroundColor":"transparent","name":"bday"}</script>
</body>

	<!-- Init Bootstrap Helpers -->
	<script src="../../../../bootstrap.js"></script>
	<script src="../../../../vs/loader.js"></script>
	<script src="../../../../bootstrap-window.js"></script>

	<!-- Startup via workbench.js -->
	<script src="workbench.js"></script>
<script src="file:///home/kimhanui/.vscode-server/extensions/zhengrenzhe.nyan-cat-0.0.8/out/nyan-cat.js"></script>
</html>

image

https://code.visualstudio.com/api/references/extension-guidelines#progress-status-bar-item

๋””๋ฒ„๊น…์„ ํ•ด๋ณด๋‹ค๊ฐ€ uncaught exception๊นŒ์ง€ ํฌํ•จํ•ด๋ณด๋‹ˆ .vscode-server/bin/(์˜๋ฌธ์ˆซ์ž์กฐํ•ฉ๊ธด์ด๋ฆ„)๋‚ด๋ถ€์—์„œ loader.js(?)๋ฅผ ๋ชป ์ฐพ๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค.
vs code server์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๊ฑฐ๋ผ๋ฉด wsl์—์„œ vs code server๋ฅผ ๋‹ค์‹œ ๋‹ค์šด ๋ฐ›์•„๋ณด๊ณ ์ž ๊ธฐ์กด mv .vscode-server .vscode-server-old๋ช…๋ น์–ด๋กœ dir ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์ฃผ๊ณ  code .๋ช…๋ น์–ด๋กœ .vscode-server๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„๊ฑธ ํ™•์ธํ•˜๊ณ  .vscode-server-old๋Š” ์ง€์› ๋‹ค.
์ฐธ๊ณ ๋กœ .vscode-server๋‚ด๋ถ€์— extensions ๊ฒฝ๋กœ๋Š” ์ง์ ‘ ๋งŒ๋“ค์–ด์ค˜์•ผํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค...
image

โš ๏ธ **GitHub.com Fallback** โš ๏ธ