Skip to content

Commit f28c268

Browse files
committed
添加依赖机制
1 parent 07c0d81 commit f28c268

File tree

4 files changed

+83
-33
lines changed

4 files changed

+83
-33
lines changed

egret-webpack-bundler/src/index.ts

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { getLibsFileList } from './egretproject';
66
import { Target_Type } from './egretproject/data';
77
import ThemePlugin from './loaders/theme';
88
import { openUrl } from './open';
9+
import { emitClassName, addDependency } from './ts-transformer';
910
const middleware = require("webpack-dev-middleware");
1011

1112

@@ -141,7 +142,8 @@ function generateConfig(
141142
getCustomTransformers: function () {
142143
return ({
143144
before: [
144-
emitClassName()
145+
emitClassName(),
146+
addDependency('../resource/default.thm.js')
145147
]
146148
});
147149
}
@@ -214,28 +216,3 @@ function startExpressServer(compilerApp: express.Express, port: number) {
214216
}
215217

216218

217-
function emitClassName() {
218-
var ts = require('typescript');
219-
return function (ctx: any) {
220-
function visitClassDeclaration(node: any) {
221-
// const isExport = node.modifiers ? node.modifiers.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) : false;
222-
var clzNameNode = node.name;
223-
var clzName = clzNameNode.getText();
224-
var binaryExpression = ts.createIdentifier("window[\"" + clzName + "\"] = " + clzName + ";");
225-
var arrays = [
226-
node,
227-
binaryExpression,
228-
];
229-
return ts.createNodeArray(arrays);
230-
}
231-
var visitor = function (node: any) {
232-
if (node.kind === ts.SyntaxKind.ClassDeclaration) {
233-
return visitClassDeclaration(node);
234-
}
235-
else {
236-
return ts.visitEachChild(node, visitor, ctx);
237-
}
238-
};
239-
return function (sf: any) { return ts.visitNode(sf, visitor); };
240-
};
241-
}

egret-webpack-bundler/src/loaders/theme.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,11 @@ export default class ThemePlugin {
131131
// this.errors = [];
132132
// });
133133

134-
// // 监听文件目录
135-
// compiler.hooks.afterCompile.tap(pluginName, compilation => {
136-
// this.dirs.forEach(item => {
137-
// compilation.contextDependencies.add(item);
138-
// });
139-
// });
134+
// 监听文件目录
135+
compiler.hooks.afterCompile.tap(pluginName, compilation => {
136+
this.dirs.forEach(item => {
137+
compilation.contextDependencies.add(item);
138+
});
139+
});
140140
}
141141
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import * as ts from 'typescript';
2+
3+
export function emitClassName() {
4+
return function (ctx: ts.TransformationContext) {
5+
function visitClassDeclaration(node: ts.ClassDeclaration) {
6+
// const isExport = node.modifiers ? node.modifiers.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) : false;
7+
var clzNameNode = node.name;
8+
var clzName = clzNameNode!.getText();
9+
var binaryExpression = ts.createIdentifier("window[\"" + clzName + "\"] = " + clzName + ";");
10+
var arrays = [
11+
node,
12+
binaryExpression,
13+
];
14+
return ts.createNodeArray(arrays);
15+
}
16+
function visitor(node: ts.Node): any {
17+
if (node.kind === ts.SyntaxKind.ClassDeclaration) {
18+
return visitClassDeclaration(node as ts.ClassDeclaration);
19+
}
20+
else {
21+
return ts.visitEachChild(node, visitor, ctx);
22+
}
23+
};
24+
return function (sf: ts.SourceFile) { return ts.visitNode(sf, visitor); };
25+
};
26+
}
27+
28+
export function addDependency(moduleName: string) {
29+
return function (ctx: ts.TransformationContext) {
30+
31+
function visitClassDeclaration(node: ts.ClassDeclaration) {
32+
// const isExport = node.modifiers ? node.modifiers.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) : false;
33+
var binaryExpression = ts.createIdentifier(`require("${moduleName}")`);
34+
var arrays = [
35+
binaryExpression,
36+
node,
37+
38+
];
39+
return ts.createNodeArray(arrays);
40+
}
41+
function visitor(node: ts.Node): any {
42+
if (node.kind === ts.SyntaxKind.ClassDeclaration) {
43+
const clz = node as ts.ClassDeclaration;
44+
if (clz.name && clz.name.getText() === "Main") {
45+
return visitClassDeclaration(node as ts.ClassDeclaration);
46+
}
47+
else {
48+
return ts.visitEachChild(node, visitor, ctx);
49+
}
50+
51+
}
52+
else {
53+
return ts.visitEachChild(node, visitor, ctx);
54+
}
55+
};
56+
57+
function visitor2(node: ts.Node): any {
58+
return ts.visitEachChild(node, visitor, ctx);
59+
};
60+
61+
return function (sf: ts.SourceFile) {
62+
if (sf.fileName.indexOf("Main.ts") >= 0) {
63+
return ts.visitNode(sf, visitor);
64+
}
65+
else {
66+
return ts.visitNode(sf, visitor2);
67+
}
68+
69+
70+
71+
};
72+
};
73+
74+
}

test-egret-project/src/Main.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import { ThemeAdapter } from "./ThemeAdapter";
3232
import { platform } from "./Platform";
3333
import { LoadingUI } from "./LoadingUI";
3434

35-
require('../resource/default.thm.js')
3635

3736
declare function require(x: string): any
3837

0 commit comments

Comments
 (0)