Skip to content
This repository was archived by the owner on Jul 6, 2025. It is now read-only.

Commit a9614ed

Browse files
committed
refactor: improve importing bundle module
1 parent 3405b25 commit a9614ed

File tree

4 files changed

+36
-38
lines changed

4 files changed

+36
-38
lines changed

framework/core/module.ts

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,15 @@ export function trimModuleExt(url: string) {
2626
}
2727

2828
export function importModule(baseUrl: string, url: string, forceRefetch = false): Promise<any> {
29-
const { __ALEPH: ALEPH, document } = window as any
29+
const { __ALEPH: ALEPH } = window as any
3030

31-
if (ALEPH && url in ALEPH.pack) {
32-
return Promise.resolve(ALEPH.pack[url])
31+
if (ALEPH) {
32+
return ALEPH.import(url, forceRefetch)
3333
}
3434

35-
if (ALEPH && url.startsWith('/pages/')) {
36-
const src = util.cleanPath(baseUrl + '/_aleph/' + trimModuleExt(url) + '.js')
37-
return new Promise((resolve, reject) => {
38-
const script = document.createElement('script')
39-
script.onload = () => {
40-
resolve(ALEPH.pack[url])
41-
}
42-
script.onerror = (err: Error) => {
43-
reject(err)
44-
}
45-
script.src = src
46-
document.body.appendChild(script)
47-
})
35+
let src = util.cleanPath(baseUrl + '/_aleph/' + trimModuleExt(url) + '.js')
36+
if (forceRefetch) {
37+
src += '?t=' + Date.now()
4838
}
49-
50-
const src = util.cleanPath(baseUrl + '/_aleph/' + trimModuleExt(url) + `.js`) + (forceRefetch ? `?t=${Date.now()}` : '')
5139
return import(src)
5240
}

server/app.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ export class Application implements ServerApplication {
180180
const url = util.cleanPath('/pages/' + util.trimPrefix(p, pagesDir))
181181
let validated = moduleExts.some(ext => p.endsWith('.' + ext))
182182
if (!validated) {
183-
validated = this.config.plugins.some(p => p.type === 'loader' && p.test.test(url) && p.allowPage)
183+
validated = this.config.plugins.some(p => p.type === 'loader' && p.test.test(url) && p.asPage)
184184
}
185185
if (validated) {
186186
await this.compile(url)
@@ -301,7 +301,7 @@ export class Application implements ServerApplication {
301301
}
302302

303303
// is page module by plugin
304-
if (this.config.plugins.some(p => p.type === 'loader' && p.test.test(url) && p.allowPage)) {
304+
if (this.config.plugins.some(p => p.type === 'loader' && p.test.test(url) && p.asPage)) {
305305
return true
306306
}
307307

@@ -462,7 +462,7 @@ export class Application implements ServerApplication {
462462
return this.config.plugins.some(p => (
463463
p.type === 'loader' &&
464464
p.test.test(url) &&
465-
(p.allowPage || p.acceptHMR)
465+
(p.asPage || p.acceptHMR)
466466
))
467467
}
468468

server/bundler.ts

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,36 @@ import {
1717
} from './helper.ts'
1818

1919
export const bundlerRuntimeCode = `
20-
window.__ALEPH = {
20+
window.__ALEPH = window.__ALEPH || {
2121
baseURL: '/',
2222
pack: {},
2323
bundledFiles: {},
24-
import: function(src, specifier) {
25-
var pack = this.pack
24+
import: function(url, forceRefetch) {
25+
var baseURL = this.baseURL,
26+
pack = this.pack,
27+
bundledFiles = this.bundledFiles;
28+
if (url in pack) {
29+
return Promise.resolve(pack[url])
30+
}
2631
return new Promise(function(resolve, reject) {
2732
var script = document.createElement('script'),
28-
a = src.split('#'),
29-
src = a[0],
30-
b = a[1].split('@'),
31-
url = b[0],
32-
hash = b[1];
33+
jsFilename = bundledFiles[url] || bundledFiles[url.replace(/\\.[a-zA-Z0-9]+$/, '')],
34+
src = (baseURL + '/_aleph').replace('//', '/');
35+
if (!jsFilename) {
36+
reject(err)
37+
return
38+
}
3339
script.onload = function () {
3440
resolve(pack[url])
3541
}
3642
script.onerror = function(err) {
3743
reject(err)
3844
}
39-
script.src = src + '?v=' + hash
45+
src += jsFilename
46+
if (forceRefetch) {
47+
src += '?t=' + (new Date).getTime()
48+
}
49+
script.src = src
4050
document.body.appendChild(script)
4151
})
4252
}
@@ -87,7 +97,7 @@ export class Bundler {
8797
}
8898
for (const url of entries) {
8999
await this.createBundleChunk(
90-
util.trimPrefix(trimModuleExt(url), '/'),
100+
trimModuleExt(url),
91101
[url],
92102
[remoteEntries, sharedEntries].flat()
93103
)
@@ -266,10 +276,10 @@ export class Bundler {
266276

267277
// minify code
268278
// todo: use swc minify instead(https://github.com/swc-project/swc/pull/1302)
269-
const mini = await minify(code, parseInt(util.trimPrefix(buildTarget, 'es')) as ECMA)
270-
if (mini !== undefined) {
271-
code = mini
272-
}
279+
// const mini = await minify(code, parseInt(util.trimPrefix(buildTarget, 'es')) as ECMA)
280+
// if (mini !== undefined) {
281+
// code = mini
282+
// }
273283

274284
await clearCompilation(bundleFile)
275285
await Deno.writeTextFile(bundleFile, code)

server/server.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ export class Server {
9393
}
9494

9595
if (pathname == '/_aleph/main.js') {
96-
req.send(app.getMainJS(pathname.includes('.bundle.')), 'application/javascript; charset=utf-8')
96+
req.send(app.getMainJS(false), 'application/javascript; charset=utf-8')
9797
return
9898
}
9999

@@ -107,7 +107,7 @@ export class Server {
107107
}
108108

109109
let content = await Deno.readTextFile(filePath)
110-
if (filePath.endsWith('.js')) {
110+
if (app.isDev && filePath.endsWith('.js')) {
111111
const metaFile = util.trimSuffix(filePath, '.js') + '.meta.json'
112112
if (existsFileSync(metaFile)) {
113113
try {
@@ -125,7 +125,7 @@ export class Server {
125125
return
126126
}
127127

128-
req.status(404).send('file not found')
128+
req.status(404).send('not found')
129129
return
130130
}
131131

0 commit comments

Comments
 (0)