|
FROM node:20 |
|
|
|
# bashとビルドツールをインストール |
|
RUN apt-get update && apt-get install -y \ |
|
bash \ |
|
curl \ |
|
build-essential \ |
|
clang \ |
|
cmake \ |
|
git \ |
|
pkg-config \ |
|
libssl-dev |
|
|
|
# 必要ならここでRustとツールチェーンをインストール |
|
# RUN curl https: |
|
# ENV PATH="/root/.cargo/bin:${PATH}" |
|
# RUN cargo install wasm-bindgen-cli wasm-opt wasm-snip |
|
|
|
WORKDIR /app |
|
COPY . . |
|
|
|
# pnpmをグローバルにインストール |
|
RUN npm install -g pnpm |
|
|
|
# 依存インストール |
|
RUN pnpm install |
|
|
|
# build.shの内容を直接実行する(RUNは分割して記述) |
|
RUN bash -c "\ |
|
set -euo pipefail && \ |
|
export WBG='wasm-bindgen 0.2.100' && \ |
|
if ! command -v cargo wasm-bindgen wasm-opt wasm-snip &>/dev/null; then \ |
|
echo 'Please install cargo, wasm-bindgen, wasm-opt, and wasm-snip!'; exit 1; \ |
|
fi && \ |
|
if ! [[ \"$(wasm-bindgen -V)\" =~ ^\"$WBG\" ]]; then \ |
|
echo \"Incorrect wasm-bindgen version: $(wasm-bindgen -V) != $WBG\"; exit 1; \ |
|
fi && \ |
|
cd rewriter/wasm && \ |
|
export RUSTFLAGS='-Zlocation-detail=none -Zfmt-debug=none' && \ |
|
if [ \"${OPTIMIZE_FOR_SIZE:-0}\" = \"1\" ]; then \ |
|
export RUSTFLAGS=\"${RUSTFLAGS} -C opt-level=z\"; \ |
|
fi && \ |
|
STD_FEATURES='panic_immediate_abort' && \ |
|
if [ \"${OPTIMIZE_FOR_SPEED:-0}\" = \"0\" ]; then \ |
|
STD_FEATURES=\"${STD_FEATURES},optimize_for_size\"; \ |
|
fi && \ |
|
cargo build --release --target wasm32-unknown-unknown \ |
|
-Z build-std=panic_abort,std -Z build-std-features=${STD_FEATURES} \ |
|
--no-default-features --features \"debug,${FEATURES:-}\" && \ |
|
wasm-bindgen --target web --out-dir out/ ../target/wasm32-unknown-unknown/release/wasm.wasm && \ |
|
sed -i 's/import.meta.url/\"\"/g' out/wasm.js && \ |
|
cd ../../ && \ |
|
wasm-snip rewriter/wasm/out/wasm_bg.wasm -o rewriter/wasm/out/wasm_snipped.wasm \ |
|
-p 'oxc_regular_expression::.*' \ |
|
'oxc_parser::ts::.*' \ |
|
'oxc_parser::jsx::.*' && \ |
|
if [ \"${RELEASE:-0}\" = \"1\" ]; then \ |
|
G=\"--generate-global-effects\" && \ |
|
wasm-opt ${WASMOPTFLAGS:-} \ |
|
rewriter/wasm/out/wasm_snipped.wasm -o rewriter/wasm/out/optimized.wasm \ |
|
--converge -tnh --vacuum $G -O4 $G --flatten $G --rereloop $G -Oz $G \ |
|
--code-folding $G --const-hoisting $G --dae $G --merge-locals; \ |
|
else \ |
|
cp rewriter/wasm/out/wasm_snipped.wasm rewriter/wasm/out/optimized.wasm; \ |
|
fi && \ |
|
mkdir -p dist && \ |
|
cp rewriter/wasm/out/optimized.wasm dist/scramjet.wasm.wasm && \ |
|
echo 'Rewriter Build Complete!'" |
|
|
|
# アプリのビルド |
|
RUN pnpm build |
|
|
|
# ポート開放と起動コマンド |
|
EXPOSE 1337 |
|
CMD ["pnpm", "dev"] |
|
|