浏览代码

Move to esbuild

customisations
alemart 7 个月前
父节点
当前提交
e9a705cda8
共有 5 个文件被更改,包括 458 次插入6470 次删除
  1. 1
    1
      .gitignore
  2. 2
    1
      docs/hooks.py
  3. 77
    0
      esbuild.mjs
  4. 369
    6456
      package-lock.json
  5. 9
    12
      package.json

+ 1
- 1
.gitignore 查看文件

20
 
20
 
21
 # mine
21
 # mine
22
 node_modules/*
22
 node_modules/*
23
-dist/*.map
23
+www/
24
 site/
24
 site/
25
 docs/__pycache__/*
25
 docs/__pycache__/*
26
 demos/**/*.blend1
26
 demos/**/*.blend1

+ 2
- 1
docs/hooks.py 查看文件

10
 def copy_directory(dir_path, site_dir):
10
 def copy_directory(dir_path, site_dir):
11
     d = os.path.join(site_dir, dir_path)
11
     d = os.path.join(site_dir, dir_path)
12
     os.makedirs(d, exist_ok=True)
12
     os.makedirs(d, exist_ok=True)
13
-    copy_tree(dir_path, d)
13
+    s = dir_path if dir_path != "dist" else "www/dist"
14
+    copy_tree(s, d)
14
 
15
 
15
 def copy_tree(src, dst, symlinks=False, ignore=None):
16
 def copy_tree(src, dst, symlinks=False, ignore=None):
16
     for item in os.listdir(src):
17
     for item in os.listdir(src):

+ 77
- 0
esbuild.mjs 查看文件

1
+import * as esbuild from 'esbuild';
2
+import { readFile } from 'fs/promises';
3
+
4
+const argv = process.argv.slice(2);
5
+const json = await readFile(new URL('package.json', import.meta.url));
6
+const pack = JSON.parse(json);
7
+const production = (argv.indexOf('--dev') < 0);
8
+const minify = (argv.indexOf('--minify') >= 0);
9
+const serve = (argv.indexOf('--serve') >= 0);
10
+
11
+const options = {
12
+    //entryPoints: ['src/main.ts'], // AR.default
13
+    stdin: {
14
+        contents: 'import AR from "./main.ts";\nmodule.exports = AR;',
15
+        resolveDir: 'src',
16
+        sourcefile: '__main.ts',
17
+    },
18
+    bundle: true,
19
+    minify: minify,
20
+    target: ['es2020'],
21
+    format: 'iife',
22
+    globalName: 'AR',
23
+    define: {
24
+        __AR_VERSION__: JSON.stringify(pack.version),
25
+        __AR_DEVELOPMENT_MODE__: String(!production),
26
+        __AR_WEBSITE__: JSON.stringify(pack.homepage),
27
+    },
28
+    legalComments: 'inline',
29
+    banner: { js: generateBanner() },
30
+    footer: { js: serve ? generateLiveReloadCode() : '' },
31
+    outfile: 'www/dist/' + (minify ? 'encantar.min.js' : 'encantar.js'),
32
+    sourcemap: !production && 'linked',
33
+    logLevel: 'info',
34
+};
35
+
36
+if(!serve) {
37
+    await esbuild.build(options);
38
+    process.exit(0);
39
+}
40
+
41
+const ctx = await esbuild.context(options);
42
+await ctx.watch();
43
+await ctx.serve({
44
+    host: '0.0.0.0',
45
+    port: 8000,
46
+    servedir: 'www',
47
+});
48
+
49
+function generateBanner()
50
+{
51
+    const { version, description, homepage, license } = pack;
52
+    const author = pack.author.replace('@', '(at)');
53
+    const year = new Date().getFullYear();
54
+    const date = new Date().toISOString();
55
+
56
+    return [
57
+    `/*!`,
58
+    ` * encantar.js version ${version}`,
59
+    ` * ${description}`,
60
+    ` * Copyright 2022-${year} ${author}`,
61
+    ` * ${homepage}`,
62
+    ` *`,
63
+    ` * @license ${license}`,
64
+    ` * Date: ${date}`,
65
+    `*/`
66
+    ].join('\n');
67
+}
68
+
69
+function generateLiveReloadCode()
70
+{
71
+    return `
72
+    (function liveReload() {
73
+       new EventSource('/esbuild').
74
+       addEventListener('change', () => location.reload());
75
+    })();
76
+    `;
77
+}

+ 369
- 6456
package-lock.json
文件差异内容过多而无法显示
查看文件


+ 9
- 12
package.json 查看文件

1
 {
1
 {
2
-  "name": "encantar-js",
2
+  "name": "encantar",
3
   "version": "0.4.1",
3
   "version": "0.4.1",
4
   "description": "GPU-accelerated Augmented Reality for the web",
4
   "description": "GPU-accelerated Augmented Reality for the web",
5
   "author": "Alexandre Martins <alemartf@gmail.com> (https://github.com/alemart)",
5
   "author": "Alexandre Martins <alemartf@gmail.com> (https://github.com/alemart)",
26
     "threejs",
26
     "threejs",
27
     "3d"
27
     "3d"
28
   ],
28
   ],
29
-  "main": "dist/encantar.js",
29
+  "type": "module",
30
+  "main": "src/main.ts",
30
   "scripts": {
31
   "scripts": {
31
-    "start": "webpack serve --mode development --env PORT=8000 --env minimize=1",
32
-    "build-dev": "npm run update && npm run clean && webpack --mode development",
33
-    "build": "npm run update && npm run clean && webpack --mode production && webpack --mode production --env minimize=1",
34
-    "clean": "rm -rf dist/encantar*.js",
32
+    "start": "node esbuild.mjs --dev --minify --serve",
33
+    "build": "tsc --noEmit && npm run clean && node esbuild.mjs && node esbuild.mjs --minify",
34
+    "clean": "rm -rf www/dist/*.*",
35
     "update": "npm update speedy-vision",
35
     "update": "npm update speedy-vision",
36
-    "deploy": "mkdocs gh-deploy",
36
+    "deploy": "npm run build && mkdocs gh-deploy",
37
     "test": "echo \"Error: no test specified\" && exit 1"
37
     "test": "echo \"Error: no test specified\" && exit 1"
38
   },
38
   },
39
   "dependencies": {
39
   "dependencies": {
40
     "speedy-vision": "github:alemart/speedy-vision#v0.9.1"
40
     "speedy-vision": "github:alemart/speedy-vision#v0.9.1"
41
   },
41
   },
42
   "devDependencies": {
42
   "devDependencies": {
43
-    "ts-loader": "^9.5.1",
44
-    "typescript": "^4.9.5",
45
-    "webpack": "^5.92.1",
46
-    "webpack-cli": "^4.9.1",
47
-    "webpack-dev-server": "^4.5.0"
43
+    "esbuild": "0.24.2",
44
+    "typescript": "^4.9.5"
48
   },
45
   },
49
   "config": {}
46
   "config": {}
50
 }
47
 }

正在加载...
取消
保存