Merge pull request #2482 from cdr/asar
Symlink node_modules.asar to node_modules in lib/vscode
This commit is contained in:
commit
c7baf5d04a
1
.gitignore
vendored
1
.gitignore
vendored
@ -9,6 +9,7 @@ release-packages/
|
|||||||
release-gcp/
|
release-gcp/
|
||||||
release-images/
|
release-images/
|
||||||
node_modules
|
node_modules
|
||||||
|
/lib/vscode/node_modules.asar
|
||||||
node-*
|
node-*
|
||||||
/plugins
|
/plugins
|
||||||
/lib/coder-cloud-agent
|
/lib/coder-cloud-agent
|
||||||
|
@ -96,6 +96,10 @@ EOF
|
|||||||
# yarn to fetch node_modules if necessary without build scripts running.
|
# 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.
|
# 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"
|
jq 'del(.scripts)' < "$VSCODE_SRC_PATH/package.json" > "$VSCODE_OUT_PATH/package.json"
|
||||||
|
|
||||||
|
pushd "$VSCODE_OUT_PATH"
|
||||||
|
symlink_asar
|
||||||
|
popd
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
@ -41,6 +41,16 @@ main() {
|
|||||||
vscode_yarn() {
|
vscode_yarn() {
|
||||||
cd lib/vscode
|
cd lib/vscode
|
||||||
yarn --production --frozen-lockfile
|
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
|
cd extensions
|
||||||
yarn --production --frozen-lockfile
|
yarn --production --frozen-lockfile
|
||||||
for ext in */; do
|
for ext in */; do
|
||||||
|
14
ci/dev/postinstall.sh
Executable file
14
ci/dev/postinstall.sh
Executable 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 "$@"
|
20
ci/lib.sh
20
ci/lib.sh
@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
pushd() {
|
pushd() {
|
||||||
builtin pushd "$@" > /dev/null
|
builtin pushd "$@" > /dev/null
|
||||||
@ -93,3 +94,22 @@ export OS
|
|||||||
# RELEASE_PATH is the destination directory for the release from the root.
|
# RELEASE_PATH is the destination directory for the release from the root.
|
||||||
# Defaults to release
|
# Defaults to release
|
||||||
RELEASE_PATH="${RELEASE_PATH-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
|
||||||
|
}
|
||||||
|
@ -58,13 +58,12 @@ const args = minimist(process.argv.slice(2), {
|
|||||||
const Module = require.__$__nodeRequire('module') as any;
|
const Module = require.__$__nodeRequire('module') as any;
|
||||||
const originalLoad = Module._load;
|
const originalLoad = Module._load;
|
||||||
|
|
||||||
Module._load = function (request: string, parent: object, isMain: boolean) {
|
Module._load = function (request: string) {
|
||||||
if (request === 'natives') {
|
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');
|
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, arguments);
|
||||||
return originalLoad.apply(this, [request.replace(/node_modules\.asar(\.unpacked)?/, 'node_modules'), parent, isMain]);
|
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
"release:github-assets": "./ci/build/release-github-assets.sh",
|
"release:github-assets": "./ci/build/release-github-assets.sh",
|
||||||
"test:standalone-release": "./ci/build/test-standalone-release.sh",
|
"test:standalone-release": "./ci/build/test-standalone-release.sh",
|
||||||
"package": "./ci/build/build-packages.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",
|
"fmt": "./ci/dev/fmt.sh",
|
||||||
"lint": "./ci/dev/lint.sh",
|
"lint": "./ci/dev/lint.sh",
|
||||||
|
Reference in New Issue
Block a user