From bd6d9f339940614b6a93f43da609a5d5835e4b17 Mon Sep 17 00:00:00 2001 From: Nathan DECHER Date: Tue, 24 Mar 2020 10:46:01 +0100 Subject: [PATCH] added JS merger --- .gitignore | 1 + Makefile | 15 +++++++++++---- mergejs.js | 29 +++++++++++++++++++++++++++++ public/js/.gitkeep | 0 {public => src}/js/snek.js | 4 ++++ 5 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 mergejs.js create mode 100644 public/js/.gitkeep rename {public => src}/js/snek.js (98%) diff --git a/.gitignore b/.gitignore index 92a832d..718b695 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,6 @@ node_modules/ public/assets/*.png public/assets/*.json public/css/*.css +public/js/*.js public/favicon.ico diff --git a/Makefile b/Makefile index ecf1e02..c620f97 100644 --- a/Makefile +++ b/Makefile @@ -8,9 +8,11 @@ SNAKE = public/assets/snake.json CSS = public/css/snek.css -OUTPUT = $(ICON) $(APPLE) $(WALL) $(SNAKE) $(CSS) +JS = public/js/snek.js -all: icon css apple wall snake +OUTPUT = $(ICON) $(APPLE) $(WALL) $(SNAKE) $(CSS) $(JS) + +all: icon apple wall snake css js icon: $(ICON) apple: $(APPLE) wall: $(WALL) @@ -19,6 +21,8 @@ snake: $(SNAKE) css: $(CSS) +js: $(JS) + public/assets/icon32.png: assets/icon.jpg convert $^ -resize 32x $@ public/assets/icon256.png: assets/icon.jpg @@ -35,8 +39,11 @@ public/assets/wall32.png: assets/wall.png public/assets/snake.json: assets/snake.json cp $^ $@ -public/css/snek.css: src/less/snek.less - lessc $^ $@ +public/css/snek.css: src/less/snek.less $(wildcard src/less/*.less) + lessc $< $@ + +public/js/snek.js: $(wildcard src/js/*.js) + node mergejs.js $^ > $@ clean: rm -f $(OUTPUT) diff --git a/mergejs.js b/mergejs.js new file mode 100644 index 0000000..821fe8d --- /dev/null +++ b/mergejs.js @@ -0,0 +1,29 @@ +const fs=require('fs'); + +const requireFn=` +const require=function require(name) { + if(require.cache[name]) return require.cache[name]; + if(!require.source[name]) throw new Error("Cannot require "+name+": not found"); + require.cache[name]=require.source[name]() || true; + return require.cache[name]; +}; +require.cache=Object.create(null); +require.source=Object.create(null); +window.require=require; +`; + +let outputCode=[requireFn]; +process.argv + .slice(2) + .map(a => [a, a.match(/([a-zA-Z_][a-zA-Z0-9_-]*).js$/)[1]]) + .forEach(([modFile, modName]) => { + const modSource=fs.readFileSync(modFile, 'utf8'); + outputCode.push(` +require.source['${modName}']=(a => a.bind(a)) (function ${modName}() { +'use strict'; +${modSource} +}); + `); + }); + +fs.writeSync(1, outputCode.join('\n')); diff --git a/public/js/.gitkeep b/public/js/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/public/js/snek.js b/src/js/snek.js similarity index 98% rename from public/js/snek.js rename to src/js/snek.js index 511ff33..f32c0cb 100644 --- a/public/js/snek.js +++ b/src/js/snek.js @@ -1,3 +1,5 @@ +const Assets=require('assets'); + const [EMPTY, FOOD, WALL, SNAKE]=Array(4).keys(); const ifNaN=(v, r) => isNaN(v)?r:v; @@ -191,3 +193,5 @@ class SnekGame { requestAnimationFrame(() => this.tick()); } } + +return SnekGame;