Merge pull request #2482 from cdr/asar

Symlink node_modules.asar to node_modules in lib/vscode
This commit is contained in:
Asher 2020-12-18 10:54:36 -08:00 committed by GitHub
commit c7baf5d04a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 52 additions and 4 deletions

1
.gitignore vendored
View File

@ -9,6 +9,7 @@ release-packages/
release-gcp/
release-images/
node_modules
/lib/vscode/node_modules.asar
node-*
/plugins
/lib/coder-cloud-agent

View File

@ -96,6 +96,10 @@ EOF
# yarn to fetch node_modules if necessary without build scripts running.
# We cannot use --no-scripts because we still want dependent package scripts to run.
jq 'del(.scripts)' < "$VSCODE_SRC_PATH/package.json" > "$VSCODE_OUT_PATH/package.json"
pushd "$VSCODE_OUT_PATH"
symlink_asar
popd
}
main "$@"

View File

@ -41,6 +41,16 @@ main() {
vscode_yarn() {
cd lib/vscode
yarn --production --frozen-lockfile
# This is a copy of symlink_asar in ../lib.sh. Look there for details.
if [ ! -e node_modules.asar ]; then
if [ "${WINDIR-}" ]; then
mklink /J node_modules.asar node_modules
else
ln -s node_modules node_modules.asar
fi
fi
cd extensions
yarn --production --frozen-lockfile
for ext in */; do

14
ci/dev/postinstall.sh Executable file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
main() {
cd "$(dirname "$0")/../.."
source ./ci/lib.sh
cd lib/vscode
yarn ${CI+--frozen-lockfile}
symlink_asar
}
main "$@"

View File

@ -1,4 +1,5 @@
#!/usr/bin/env bash
set -euo pipefail
pushd() {
builtin pushd "$@" > /dev/null
@ -93,3 +94,22 @@ export OS
# RELEASE_PATH is the destination directory for the release from the root.
# Defaults to release
RELEASE_PATH="${RELEASE_PATH-release}"
# VS Code bundles some modules into an asar which is an archive format that
# works like tar. It then seems to get unpacked into node_modules.asar.
#
# I don't know why they do this but all the dependencies they bundle already
# exist in node_modules so just symlink it. We have to do this since not only VS
# Code itself but also extensions will look specifically in this directory for
# files (like the ripgrep binary or the oniguruma wasm).
symlink_asar() {
if [ ! -e node_modules.asar ]; then
if [ "${WINDIR-}" ]; then
# mklink takes the link name first.
mklink /J node_modules.asar node_modules
else
# ln takes the link name second.
ln -s node_modules node_modules.asar
fi
fi
}

View File

@ -58,13 +58,12 @@ const args = minimist(process.argv.slice(2), {
const Module = require.__$__nodeRequire('module') as any;
const originalLoad = Module._load;
Module._load = function (request: string, parent: object, isMain: boolean) {
Module._load = function (request: string) {
if (request === 'natives') {
throw new Error('Either the extension or a NPM dependency is using the "natives" node module which is unsupported as it can cause a crash of the extension host. Click [here](https://go.microsoft.com/fwlink/?linkid=871887) to find out more');
}
// NOTE@coder: Map node_module.asar requests to regular node_modules.
return originalLoad.apply(this, [request.replace(/node_modules\.asar(\.unpacked)?/, 'node_modules'), parent, isMain]);
return originalLoad.apply(this, arguments);
};
})();

View File

@ -19,7 +19,7 @@
"release:github-assets": "./ci/build/release-github-assets.sh",
"test:standalone-release": "./ci/build/test-standalone-release.sh",
"package": "./ci/build/build-packages.sh",
"postinstall": "cd lib/vscode && yarn ${CI+--frozen-lockfile}",
"postinstall": "./ci/dev/postinstall.sh",
"_____": "",
"fmt": "./ci/dev/fmt.sh",
"lint": "./ci/dev/lint.sh",