Minify JS build with terser

This commit is contained in:
Max Brunsfeld 2019-04-26 19:13:32 -07:00
parent 48743dda44
commit b4c4dc48ff
5 changed files with 42 additions and 22 deletions

View file

@ -25,6 +25,7 @@
"homepage": "https://github.com/tree-sitter/tree-sitter#readme",
"devDependencies": {
"chai": "^4.2.0",
"mocha": "^6.1.4"
"mocha": "^6.1.4",
"terser": "^3.17.0"
}
}

View file

@ -1,9 +1,8 @@
const Parser = require('../../../target/release/tree-sitter.js');
const Python = require.resolve('../../../target/scratch/tree-sitter-python.wasm');
const JavaScript = require.resolve('../../../target/scratch/tree-sitter-javascript.wasm');
const release = '../../../target/release'
const Parser = require(`${release}/tree-sitter.js`);
const JavaScript = require.resolve(`${release}/tree-sitter-javascript.wasm`);
module.exports = Parser.init().then(async () => ({
Parser,
JavaScript: await Parser.Language.load(JavaScript),
Python: await Parser.Language.load(Python)
}));

View file

@ -1,15 +1,15 @@
#!/usr/bin/env bash
set -e
export EMCC_FORCE_STDLIBS=libc++
args="-Os"
target_dir="target/release"
if [[ "$1" == "--debug" ]]; then
args="-s SAFE_HEAP=1 -O0"
target_dir="target/debug"
args="-s ASSERTIONS=1 SAFE_HEAP=1 -O0"
fi
mkdir -p $target_dir
mkdir -p target/scratch target/release
docker run \
--rm \
@ -21,7 +21,6 @@ docker run \
-s WASM=1 \
-s ALLOW_MEMORY_GROWTH \
-s MAIN_MODULE=1 \
-s ASSERTIONS=1 \
-s EXPORT_ALL=1 \
$args \
-std=c99 \
@ -34,4 +33,21 @@ docker run \
--post-js lib/web/binding.js \
lib/src/lib.c \
lib/web/binding.c \
-o $target_dir/tree-sitter.js
-o target/scratch/tree-sitter.js
if [ ! -d lib/web/node_modules/terser ]; then
(
cd lib/web
npm install
)
fi
lib/web/node_modules/.bin/terser \
--compress \
--mangle \
--keep-fnames \
--keep-classnames \
-- target/scratch/tree-sitter.js \
> target/release/tree-sitter.js
mv target/scratch/tree-sitter.wasm target/release/tree-sitter.wasm

View file

@ -8,6 +8,7 @@ root_dir=$PWD
tree_sitter=${root_dir}/target/release/tree-sitter
grammars_dir=${root_dir}/test/fixtures/grammars
grammar_names=(
c
javascript
python
)
@ -21,4 +22,4 @@ for grammar_name in ${grammar_names[@]}; do
$tree_sitter build-wasm ${grammars_dir}/${grammar_name}
done
mv tree-sitter-*.wasm target/scratch/
mv tree-sitter-*.wasm target/release/

View file

@ -7,17 +7,20 @@ bundle exec jekyll serve "$@" &
bundle exec ruby <<RUBY &
require "listen"
dir = "$root/target/release"
puts "Watching #{dir}"
listener = Listen.to(dir, only: /^tree-sitter\.(js|wasm)$/, wait_for_delay: 3.0) do
puts "WASM files updated. Copying to docs folder..."
system(
"cp",
"$root/target/release/tree-sitter.js",
"$root/target/release/tree-sitter.wasm",
"$root/docs/assets/js/"
)
def copy_wasm_files
`cp $root/target/release/*.{js,wasm} $root/docs/assets/js/`
end
puts "Copying WASM files to docs folder..."
copy_wasm_files
puts "Watching release directory"
listener = Listen.to("$root/target/release", only: /^tree-sitter\.(js|wasm)$/, wait_for_delay: 2) do
puts "WASM files updated. Copying new files to docs folder..."
copy_wasm_files
end
listener.start
sleep
RUBY