Skip installing optional npm deps, but manually install Closure Compiler native package (#636)
Follow on to #625, #630, #632, #633
Fixes emscripten-core/emscripten#12406
diff --git a/emsdk.py b/emsdk.py
index 39637b9..ee5452d 100644
--- a/emsdk.py
+++ b/emsdk.py
@@ -1223,13 +1223,41 @@
print('Running post-install step: npm ci ...')
try:
subprocess.check_output(
- [npm, 'ci', '--production'],
+ [npm, 'ci', '--production', '--no-optional'],
cwd=directory, stderr=subprocess.STDOUT, env=env,
universal_newlines=True)
except subprocess.CalledProcessError as e:
print('Error running %s:\n%s' % (e.cmd, e.output))
return False
+ # Manually install the appropriate native Closure Compiler package
+ # This is currently needed because npm ci will install the packages
+ # for Closure for all platforms, adding 180MB to the download size
+ # There are two problems here:
+ # 1. npm ci does not consider the platform of optional dependencies
+ # https://github.com/npm/cli/issues/558
+ # 2. A bug with the native compiler has bloated the packages from
+ # 30MB to almost 300MB
+ # https://github.com/google/closure-compiler-npm/issues/186
+ # If either of these bugs are fixed then we can remove this exception
+ closure_compiler_native = ''
+ if LINUX and ARCH in ('x86', 'x86_64'):
+ closure_compiler_native = 'google-closure-compiler-linux'
+ if MACOS and ARCH in ('x86', 'x86_64'):
+ closure_compiler_native = 'google-closure-compiler-osx'
+ if WINDOWS and ARCH == 'x86_64':
+ closure_compiler_native = 'google-closure-compiler-windows'
+ if closure_compiler_native:
+ print('Running post-install step: npm install', closure_compiler_native)
+ try:
+ subprocess.check_output(
+ [npm, 'install', closure_compiler_native],
+ cwd=directory, stderr=subprocess.STDOUT, env=env,
+ universal_newlines=True)
+ except subprocess.CalledProcessError as e:
+ print('Error running %s:\n%s' % (e.cmd, e.output))
+ return False
+
print('Done running: npm ci')
return True