@simplysm/sd-cli 7.0.81 → 7.0.146
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/sd-cli.mjs +36 -6
- package/dist/build-tool/SdCliCordova.d.ts +4 -4
- package/dist/build-tool/SdCliCordova.mjs +108 -107
- package/dist/build-tool/SdCliElectron.d.ts +9 -0
- package/dist/build-tool/SdCliElectron.mjs +66 -0
- package/dist/build-tool/SdCliGithubApi.d.ts +13 -0
- package/dist/build-tool/SdCliGithubApi.mjs +93 -0
- package/dist/builder/SdCliClientBuilder.mjs +151 -65
- package/dist/builder/SdCliServerBuilder.mjs +6 -7
- package/dist/commons.d.ts +38 -11
- package/dist/entry-points/SdCliWorkspace.mjs +48 -6
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +3 -1
- package/dist/ng-tools/babel/SdCliBbFileMetadata.mjs +2 -2
- package/dist/ng-tools/babel/SdCliBbRootMetadata.d.ts +1 -0
- package/dist/ng-tools/babel/SdCliBbRootMetadata.mjs +29 -3
- package/dist/packages/SdCliPackage.mjs +13 -2
- package/package.json +13 -7
- package/src/bin/sd-cli.ts +46 -7
- package/src/build-tool/SdCliCordova.ts +133 -141
- package/src/build-tool/SdCliElectron.ts +76 -0
- package/src/build-tool/SdCliGithubApi.ts +117 -0
- package/src/builder/SdCliClientBuilder.ts +165 -65
- package/src/builder/SdCliServerBuilder.ts +6 -7
- package/src/commons.ts +35 -11
- package/src/entry-points/SdCliWorkspace.ts +47 -6
- package/src/index.ts +2 -0
- package/src/ng-tools/babel/SdCliBbFileMetadata.ts +1 -1
- package/src/ng-tools/babel/SdCliBbRootMetadata.ts +30 -2
- package/src/packages/SdCliPackage.ts +18 -1
- package/tsconfig.json +3 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import https from "https";
|
|
2
|
+
import { SdProcess } from "@simplysm/sd-core-node";
|
|
3
|
+
import mime from "mime";
|
|
4
|
+
export class SdCliGithubApi {
|
|
5
|
+
constructor(_apiKey, _repoOwner, _repoName) {
|
|
6
|
+
this._apiKey = _apiKey;
|
|
7
|
+
this._repoOwner = _repoOwner;
|
|
8
|
+
this._repoName = _repoName;
|
|
9
|
+
}
|
|
10
|
+
async uploadAsync(version, files) {
|
|
11
|
+
// await this._pushAllAsync();
|
|
12
|
+
const releaseId = await this._createReleaseTagAsync(version);
|
|
13
|
+
for (const file of files) {
|
|
14
|
+
await this._uploadFileAsync(releaseId, file.name, file.buffer);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
async _uploadFileAsync(releaseId, fileName, buffer) {
|
|
18
|
+
const contentLength = buffer.length;
|
|
19
|
+
await new Promise((resolve, reject) => {
|
|
20
|
+
const req = https.request(`https://uploads.github.com/repos/${this._repoOwner}/${this._repoName}/releases/${releaseId}/assets?name=${fileName}&label=${fileName}`, {
|
|
21
|
+
method: "POST",
|
|
22
|
+
headers: {
|
|
23
|
+
"Authorization": `token ${this._apiKey}`,
|
|
24
|
+
"Accept": "application/vnd.github.v3+json",
|
|
25
|
+
"User-Agent": "@simplysm/sd-cli:publish",
|
|
26
|
+
"Content-Length": contentLength,
|
|
27
|
+
"Content-Type": mime.getType(fileName)
|
|
28
|
+
}
|
|
29
|
+
}, (res) => {
|
|
30
|
+
let dataBuffer = Buffer.from([]);
|
|
31
|
+
res.on("data", data => {
|
|
32
|
+
dataBuffer = Buffer.concat([dataBuffer, data]);
|
|
33
|
+
});
|
|
34
|
+
res.on("end", () => {
|
|
35
|
+
if (res.statusCode !== 201) {
|
|
36
|
+
const errObj = JSON.parse(dataBuffer.toString());
|
|
37
|
+
throw new Error(errObj.message + "(" + errObj.documentation_url + ")");
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
resolve();
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
req.on("error", (error) => {
|
|
45
|
+
reject(error);
|
|
46
|
+
});
|
|
47
|
+
req.write(buffer);
|
|
48
|
+
req.end();
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async _createReleaseTagAsync(ver) {
|
|
52
|
+
const currentBranch = (await SdProcess.spawnAsync("git branch --show-current")).trim();
|
|
53
|
+
return await new Promise((resolve, reject) => {
|
|
54
|
+
const req = https.request(`https://api.github.com/repos/${this._repoOwner}/${this._repoName}/releases`, {
|
|
55
|
+
method: "POST",
|
|
56
|
+
headers: {
|
|
57
|
+
"Authorization": `token ${this._apiKey}`,
|
|
58
|
+
"Accept": "application/vnd.github.v3+json",
|
|
59
|
+
"User-Agent": "@simplysm/sd-cli:publish"
|
|
60
|
+
}
|
|
61
|
+
}, (res) => {
|
|
62
|
+
let dataBuffer = Buffer.from([]);
|
|
63
|
+
res.on("data", data => {
|
|
64
|
+
dataBuffer = Buffer.concat([dataBuffer, data]);
|
|
65
|
+
});
|
|
66
|
+
res.on("end", () => {
|
|
67
|
+
if (res.statusCode !== 201) {
|
|
68
|
+
const errObj = JSON.parse(dataBuffer.toString());
|
|
69
|
+
throw new Error(errObj.message + "(" + errObj.documentation_url + ")");
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// console.log(JSON.parse(dataBuffer.toString()));
|
|
73
|
+
const resData = JSON.parse(dataBuffer.toString());
|
|
74
|
+
resolve(resData.id);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
req.on("error", (error) => {
|
|
79
|
+
reject(error);
|
|
80
|
+
});
|
|
81
|
+
req.write(JSON.stringify({
|
|
82
|
+
tag_name: `v${ver}`,
|
|
83
|
+
target_commitish: currentBranch,
|
|
84
|
+
name: `v${ver}`,
|
|
85
|
+
body: `v${ver}`,
|
|
86
|
+
draft: false,
|
|
87
|
+
prerelease: false
|
|
88
|
+
}));
|
|
89
|
+
req.end();
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlHaXRodWJBcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGQtdG9vbC9TZENsaUdpdGh1YkFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUV4QixNQUFNLE9BQU8sY0FBYztJQUN6QixZQUFvQyxPQUFlLEVBQ2YsVUFBa0IsRUFDbEIsU0FBaUI7UUFGakIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBUTtJQUNyRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFlLEVBQUUsS0FBeUM7UUFDakYsOEJBQThCO1FBRTlCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxRQUFnQixFQUFFLE1BQWM7UUFDaEYsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUVwQyxNQUFNLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQ3ZCLG9DQUFvQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLGFBQWEsU0FBUyxnQkFBZ0IsUUFBUSxV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
|
|
@@ -5,7 +5,7 @@ import path from "path";
|
|
|
5
5
|
import ts from "typescript";
|
|
6
6
|
import { SdCliBuildResultUtil } from "../utils/SdCliBuildResultUtil";
|
|
7
7
|
import { NamedChunksPlugin } from "@angular-devkit/build-angular/src/webpack/plugins/named-chunks-plugin";
|
|
8
|
-
import {
|
|
8
|
+
import { DedupeModuleResolvePlugin, JavaScriptOptimizerPlugin, SuppressExtractedTextChunksWebpackPlugin } from "@angular-devkit/build-angular/src/webpack/plugins";
|
|
9
9
|
import CopyWebpackPlugin from "copy-webpack-plugin";
|
|
10
10
|
import MiniCssExtractPlugin from "mini-css-extract-plugin";
|
|
11
11
|
import { AngularWebpackPlugin } from "@ngtools/webpack";
|
|
@@ -23,10 +23,10 @@ import { TransferSizePlugin } from "@angular-devkit/build-angular/src/webpack/pl
|
|
|
23
23
|
import { CssOptimizerPlugin } from "@angular-devkit/build-angular/src/webpack/plugins/css-optimizer-plugin";
|
|
24
24
|
import browserslist from "browserslist";
|
|
25
25
|
import { augmentAppWithServiceWorker } from "@angular-devkit/build-angular/src/utils/service-worker";
|
|
26
|
-
import { StringUtil } from "@simplysm/sd-core-common";
|
|
27
26
|
import { SdCliNgModuleGenerator } from "../ng-tools/SdCliNgModuleGenerator";
|
|
28
27
|
import { SdCliCordova } from "../build-tool/SdCliCordova";
|
|
29
28
|
import { SdCliNpmConfigUtil } from "../utils/SdCliNpmConfigUtil";
|
|
29
|
+
import electronBuilder from "electron-builder";
|
|
30
30
|
export class SdCliClientBuilder extends EventEmitter {
|
|
31
31
|
constructor(_rootPath, _config, _workspaceRootPath) {
|
|
32
32
|
super();
|
|
@@ -60,8 +60,8 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
60
60
|
rootClassName: "AppPage"
|
|
61
61
|
} : undefined);
|
|
62
62
|
// CORDOVA
|
|
63
|
-
if (this._config.cordova) {
|
|
64
|
-
this._cordova = new SdCliCordova(this._rootPath, this._config.cordova);
|
|
63
|
+
if (this._config.builder?.cordova) {
|
|
64
|
+
this._cordova = new SdCliCordova(this._rootPath, this._config.builder.cordova);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
on(event, listener) {
|
|
@@ -69,6 +69,7 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
69
69
|
}
|
|
70
70
|
async watchAsync() {
|
|
71
71
|
// DIST 비우기
|
|
72
|
+
await FsUtil.removeAsync(path.resolve(this._rootPath, ".electron"));
|
|
72
73
|
await FsUtil.removeAsync(this._parsedTsconfig.options.outDir);
|
|
73
74
|
// NgModule 생성
|
|
74
75
|
await this._ngModuleGenerator.runAsync();
|
|
@@ -78,78 +79,85 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
78
79
|
await this._cordova.initializeAsync();
|
|
79
80
|
}
|
|
80
81
|
// 빌드 준비
|
|
81
|
-
const
|
|
82
|
-
|
|
82
|
+
const webpackConfigs = Object.keys(this._config.builder ?? { web: {} })
|
|
83
|
+
.map((builderType) => this._getWebpackConfig(true, builderType));
|
|
84
|
+
const multiCompiler = webpack(webpackConfigs);
|
|
83
85
|
return await new Promise((resolve, reject) => {
|
|
84
|
-
|
|
86
|
+
multiCompiler.hooks.invalid.tap(this.constructor.name, (fileName) => {
|
|
85
87
|
if (fileName != null) {
|
|
86
88
|
this._logger.debug("파일변경 감지", fileName);
|
|
87
89
|
// NgModule 캐시 삭제
|
|
88
90
|
this._ngModuleGenerator.removeCaches([path.resolve(fileName)]);
|
|
89
91
|
}
|
|
90
92
|
});
|
|
91
|
-
|
|
93
|
+
multiCompiler.hooks.watchRun.tapAsync(this.constructor.name, async (args, callback) => {
|
|
92
94
|
this.emit("change");
|
|
93
95
|
// NgModule 생성
|
|
94
96
|
await this._ngModuleGenerator.runAsync();
|
|
95
97
|
callback();
|
|
96
98
|
this._logger.debug("Webpack 빌드 수행...");
|
|
97
99
|
});
|
|
98
|
-
compiler.
|
|
99
|
-
this.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
100
|
+
for (const compiler of multiCompiler.compilers) {
|
|
101
|
+
compiler.hooks.failed.tap(this.constructor.name, (err) => {
|
|
102
|
+
this.emit("complete", [{
|
|
103
|
+
filePath: undefined,
|
|
104
|
+
line: undefined,
|
|
105
|
+
char: undefined,
|
|
106
|
+
code: undefined,
|
|
107
|
+
severity: "error",
|
|
108
|
+
message: err.stack
|
|
109
|
+
}]);
|
|
110
|
+
reject(err);
|
|
111
|
+
return;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
multiCompiler.hooks.done.tap(this.constructor.name, async (multiStats) => {
|
|
111
115
|
// 결과 반환
|
|
112
|
-
const results = SdCliBuildResultUtil.convertFromWebpackStats(stats);
|
|
116
|
+
const results = multiStats.stats.mapMany((stats) => SdCliBuildResultUtil.convertFromWebpackStats(stats));
|
|
113
117
|
// .config.json 파일 쓰기
|
|
114
118
|
const npmConfig = this._getNpmConfig(this._rootPath);
|
|
115
119
|
const packageKey = npmConfig.name.split("/").last();
|
|
116
|
-
const configDistPath =
|
|
120
|
+
const configDistPath = typeof this._config.server === "string"
|
|
117
121
|
? path.resolve(this._workspaceRootPath, "packages", this._config.server, "dist/www", packageKey, ".config.json")
|
|
118
122
|
: path.resolve(this._parsedTsconfig.options.outDir, ".config.json");
|
|
119
123
|
await FsUtil.writeFileAsync(configDistPath, JSON.stringify(this._config.configs ?? {}, undefined, 2));
|
|
120
124
|
// 마무리
|
|
121
125
|
this._logger.debug("Webpack 빌드 완료");
|
|
122
|
-
resolve(
|
|
126
|
+
resolve(middlewares);
|
|
123
127
|
this.emit("complete", results);
|
|
124
128
|
});
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
129
|
+
const middlewares = multiCompiler.compilers.mapMany((compiler) => [
|
|
130
|
+
wdm(compiler, {
|
|
131
|
+
publicPath: compiler.options.output.publicPath,
|
|
132
|
+
index: "index.html",
|
|
133
|
+
stats: false
|
|
134
|
+
}),
|
|
135
|
+
whm(compiler, {
|
|
136
|
+
path: `${compiler.options.output.publicPath}__webpack_hmr`,
|
|
137
|
+
log: false
|
|
138
|
+
})
|
|
139
|
+
]);
|
|
134
140
|
});
|
|
135
141
|
}
|
|
136
142
|
async buildAsync() {
|
|
137
143
|
// DIST 비우기
|
|
144
|
+
await FsUtil.removeAsync(path.resolve(this._rootPath, ".electron"));
|
|
138
145
|
await FsUtil.removeAsync(this._parsedTsconfig.options.outDir);
|
|
139
146
|
// NgModule 생성
|
|
140
147
|
await this._ngModuleGenerator.runAsync();
|
|
141
148
|
// 빌드
|
|
142
149
|
this._logger.debug("Webpack 빌드 수행...");
|
|
143
|
-
const
|
|
144
|
-
const
|
|
150
|
+
const builderTypes = Object.keys(this._config.builder ?? { web: {} });
|
|
151
|
+
const webpackConfigs = builderTypes.map((builderType) => this._getWebpackConfig(false, builderType));
|
|
152
|
+
const multipleCompiler = webpack(webpackConfigs);
|
|
145
153
|
const buildResults = await new Promise((resolve, reject) => {
|
|
146
|
-
|
|
147
|
-
if (err != null ||
|
|
154
|
+
multipleCompiler.run((err, multiStats) => {
|
|
155
|
+
if (err != null || multiStats == null) {
|
|
148
156
|
reject(err);
|
|
149
157
|
return;
|
|
150
158
|
}
|
|
151
159
|
// 결과 반환
|
|
152
|
-
const results = SdCliBuildResultUtil.convertFromWebpackStats(stats);
|
|
160
|
+
const results = multiStats.stats.mapMany((stats) => SdCliBuildResultUtil.convertFromWebpackStats(stats));
|
|
153
161
|
resolve(results);
|
|
154
162
|
});
|
|
155
163
|
});
|
|
@@ -157,16 +165,68 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
157
165
|
const targetPath = path.resolve(this._parsedTsconfig.options.outDir, ".config.json");
|
|
158
166
|
await FsUtil.writeFileAsync(targetPath, JSON.stringify(this._config.configs ?? {}, undefined, 2));
|
|
159
167
|
// service-worker 처리
|
|
160
|
-
if (FsUtil.exists(path.resolve(this._rootPath, "ngsw-config.json"))) {
|
|
168
|
+
if (builderTypes.includes("web") && FsUtil.exists(path.resolve(this._rootPath, "ngsw-config.json"))) {
|
|
161
169
|
const packageKey = this._getNpmConfig(this._rootPath).name.split("/").last();
|
|
162
|
-
await augmentAppWithServiceWorker(PathUtil.posix(path.relative(this._workspaceRootPath, this._rootPath)), PathUtil.posix(path.relative(this._workspaceRootPath, this._parsedTsconfig.options.outDir)), `/${packageKey}/`, PathUtil.posix(path.relative(this._workspaceRootPath, path.resolve(this._rootPath, "ngsw-config.json"))));
|
|
170
|
+
await augmentAppWithServiceWorker(PathUtil.posix(path.relative(this._workspaceRootPath, this._rootPath)), PathUtil.posix(path.relative(this._workspaceRootPath, path.resolve(this._parsedTsconfig.options.outDir))), `/${packageKey}/`, PathUtil.posix(path.relative(this._workspaceRootPath, path.resolve(this._rootPath, "ngsw-config.json"))));
|
|
163
171
|
}
|
|
164
172
|
// CORDOVA
|
|
165
173
|
if (this._cordova) {
|
|
166
174
|
this._logger.debug("CORDOVA 구성...");
|
|
167
175
|
await this._cordova.initializeAsync();
|
|
168
176
|
this._logger.debug("CORDOVA 빌드...");
|
|
169
|
-
await this._cordova.buildAsync(this._parsedTsconfig.options.outDir);
|
|
177
|
+
await this._cordova.buildAsync(path.resolve(this._parsedTsconfig.options.outDir, "cordova"));
|
|
178
|
+
}
|
|
179
|
+
// ELECTRON
|
|
180
|
+
if (this._config.builder?.electron) {
|
|
181
|
+
const npmConfig = this._getNpmConfig(this._rootPath);
|
|
182
|
+
const electronVersion = npmConfig.dependencies?.["electron"];
|
|
183
|
+
if (electronVersion === undefined) {
|
|
184
|
+
throw new Error("ELECTRON 빌드 패키지의 'dependencies'에는 'electron'이 반드시 포함되어야 합니다.");
|
|
185
|
+
}
|
|
186
|
+
const dotenvVersion = npmConfig.dependencies?.["dotenv"];
|
|
187
|
+
if (dotenvVersion === undefined) {
|
|
188
|
+
throw new Error("ELECTRON 빌드 패키지의 'dependencies'에는 'dotenv'가 반드시 포함되어야 합니다.");
|
|
189
|
+
}
|
|
190
|
+
const electronSrcPath = path.resolve(this._rootPath, `.electron/src`);
|
|
191
|
+
const electronDistPath = path.resolve(this._rootPath, `.electron/dist`);
|
|
192
|
+
await FsUtil.writeJsonAsync(path.resolve(electronSrcPath, `package.json`), {
|
|
193
|
+
name: npmConfig.name,
|
|
194
|
+
version: npmConfig.version,
|
|
195
|
+
description: npmConfig.description,
|
|
196
|
+
main: "electron.js",
|
|
197
|
+
author: npmConfig.author,
|
|
198
|
+
license: npmConfig.license,
|
|
199
|
+
devDependencies: {
|
|
200
|
+
"electron": electronVersion.replace("^", "")
|
|
201
|
+
},
|
|
202
|
+
dependencies: {
|
|
203
|
+
"dotenv": dotenvVersion
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
await FsUtil.writeFileAsync(path.resolve(electronSrcPath, `.env`), [
|
|
207
|
+
"NODE_ENV=production",
|
|
208
|
+
`SD_VERSION=${npmConfig.version}`,
|
|
209
|
+
(this._config.builder.electron.icon !== undefined) ? `SD_ELECTRON_ICON=${this._config.builder.electron.icon}` : `SD_ELECTRON_ICON=favicon.ico`,
|
|
210
|
+
...(this._config.env !== undefined) ? Object.keys(this._config.env).map((key) => `${key}=${this._config.env[key]}`) : []
|
|
211
|
+
].filterExists().join("\n"));
|
|
212
|
+
let electronTsFileContent = await FsUtil.readFileAsync(path.resolve(this._rootPath, `src/electron.ts`));
|
|
213
|
+
electronTsFileContent = "require(\"dotenv\").config({ path: `${__dirname}\\\\.env` });\n" + electronTsFileContent;
|
|
214
|
+
const result = ts.transpileModule(electronTsFileContent, { compilerOptions: { module: ts.ModuleKind.CommonJS } });
|
|
215
|
+
await FsUtil.writeFileAsync(path.resolve(electronSrcPath, "electron.js"), result.outputText);
|
|
216
|
+
await electronBuilder.build({
|
|
217
|
+
targets: electronBuilder.Platform.WINDOWS.createTarget(),
|
|
218
|
+
config: {
|
|
219
|
+
appId: this._config.builder.electron.appId,
|
|
220
|
+
productName: npmConfig.description,
|
|
221
|
+
nsis: {},
|
|
222
|
+
directories: {
|
|
223
|
+
app: electronSrcPath,
|
|
224
|
+
output: electronDistPath
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
await FsUtil.copyAsync(path.resolve(this._rootPath, `.electron/dist/${npmConfig.description} Setup ${npmConfig.version}.exe`), path.resolve(this._parsedTsconfig.options.outDir, `electron/${npmConfig.description}-v${npmConfig.version}.exe`));
|
|
229
|
+
await FsUtil.copyAsync(path.resolve(this._rootPath, `.electron/dist/${npmConfig.description} Setup ${npmConfig.version}.exe`), path.resolve(this._parsedTsconfig.options.outDir, `electron/${npmConfig.description}-latest.exe`));
|
|
170
230
|
}
|
|
171
231
|
// 마무리
|
|
172
232
|
this._logger.debug("Webpack 빌드 완료");
|
|
@@ -178,18 +238,22 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
178
238
|
...FsUtil.findAllParentChildDirPaths(`node_modules/!(@simplysm|@${workspaceName})/*/package.json`, this._rootPath, this._workspaceRootPath),
|
|
179
239
|
].map((p) => path.dirname(p));
|
|
180
240
|
}
|
|
181
|
-
_getWebpackConfig(watch) {
|
|
241
|
+
_getWebpackConfig(watch, builderType) {
|
|
182
242
|
const workspaceNpmConfig = this._getNpmConfig(this._workspaceRootPath);
|
|
183
243
|
const workspaceName = workspaceNpmConfig.name;
|
|
184
244
|
const internalModuleCachePaths = watch ? this._getInternalModuleCachePaths(workspaceName) : undefined;
|
|
185
245
|
const npmConfig = this._getNpmConfig(this._rootPath);
|
|
186
|
-
const pkgVersion = npmConfig.version;
|
|
187
|
-
const ngVersion = this._getNpmConfig(FsUtil.findAllParentChildDirPaths("node_modules/@angular/core", this._rootPath, this._workspaceRootPath)[0])
|
|
246
|
+
// const pkgVersion = npmConfig.version;
|
|
247
|
+
// const ngVersion = this._getNpmConfig(FsUtil.findAllParentChildDirPaths("node_modules/@angular/core", this._rootPath, this._workspaceRootPath)[0])!.version;
|
|
248
|
+
const workspacePkgLockContent = FsUtil.readFile(path.resolve(this._workspaceRootPath, "package-lock.json"));
|
|
188
249
|
const pkgKey = npmConfig.name.split("/").last();
|
|
189
|
-
const publicPath =
|
|
250
|
+
const publicPath = builderType === "web" ? `/${pkgKey}/` : watch ? `/${pkgKey}/${builderType}/` : ``;
|
|
190
251
|
const cacheBasePath = path.resolve(this._rootPath, ".cache");
|
|
191
|
-
const cachePath = path.resolve(cacheBasePath, pkgVersion);
|
|
192
|
-
const distPath = (
|
|
252
|
+
// const cachePath = path.resolve(cacheBasePath, pkgVersion);
|
|
253
|
+
const distPath = (builderType === "cordova" && !watch) ? path.resolve(this._cordova.cordovaPath, "www")
|
|
254
|
+
: (builderType === "electron" && !watch) ? path.resolve(this._rootPath, ".electron/src")
|
|
255
|
+
: builderType === "web" ? this._parsedTsconfig.options.outDir
|
|
256
|
+
: `${this._parsedTsconfig.options.outDir}/${builderType}`;
|
|
193
257
|
const sassImplementation = new SassWorkerImplementation();
|
|
194
258
|
const mainFilePath = path.resolve(this._rootPath, "src/main.ts");
|
|
195
259
|
const polyfillsFilePath = path.resolve(this._rootPath, "src/polyfills.ts");
|
|
@@ -198,7 +262,7 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
198
262
|
return {
|
|
199
263
|
mode: watch ? "development" : "production",
|
|
200
264
|
devtool: false,
|
|
201
|
-
target: ["web", "es2015"],
|
|
265
|
+
target: builderType === "electron" ? ["electron-renderer", "es2015"] : ["web", "es2015"],
|
|
202
266
|
profile: false,
|
|
203
267
|
resolve: {
|
|
204
268
|
roots: [this._rootPath],
|
|
@@ -206,7 +270,7 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
206
270
|
symlinks: true,
|
|
207
271
|
modules: [this._workspaceRootPath, "node_modules"],
|
|
208
272
|
mainFields: ["es2015", "browser", "module", "main"],
|
|
209
|
-
conditionNames: ["es2015", "..."]
|
|
273
|
+
conditionNames: ["es2015", "..."],
|
|
210
274
|
},
|
|
211
275
|
resolveLoader: {
|
|
212
276
|
symlinks: true
|
|
@@ -249,14 +313,15 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
249
313
|
cache: {
|
|
250
314
|
type: "filesystem",
|
|
251
315
|
profile: watch ? undefined : false,
|
|
252
|
-
cacheDirectory: path.resolve(
|
|
316
|
+
cacheDirectory: path.resolve(cacheBasePath, "angular-webpack"),
|
|
253
317
|
maxMemoryGenerations: 1,
|
|
254
318
|
name: createHash("sha1")
|
|
255
|
-
.update(
|
|
256
|
-
.update(
|
|
319
|
+
.update(workspacePkgLockContent)
|
|
320
|
+
// .update(pkgVersion)
|
|
321
|
+
// .update(ngVersion)
|
|
257
322
|
.update(JSON.stringify(this._parsedTsconfig.options))
|
|
258
|
-
.update(this._workspaceRootPath)
|
|
259
|
-
.update(this._rootPath)
|
|
323
|
+
// .update(this._workspaceRootPath)
|
|
324
|
+
// .update(this._rootPath)
|
|
260
325
|
.update(JSON.stringify(this._config))
|
|
261
326
|
.update(watch.toString())
|
|
262
327
|
.digest("hex")
|
|
@@ -363,7 +428,7 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
363
428
|
{
|
|
364
429
|
loader: "@angular-devkit/build-angular/src/babel/webpack-loader",
|
|
365
430
|
options: {
|
|
366
|
-
cacheDirectory: path.resolve(
|
|
431
|
+
cacheDirectory: path.resolve(cacheBasePath, "babel-webpack"),
|
|
367
432
|
scriptTarget: ts.ScriptTarget.ES2017,
|
|
368
433
|
aot: true,
|
|
369
434
|
optimize: !watch,
|
|
@@ -437,7 +502,9 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
437
502
|
]
|
|
438
503
|
},
|
|
439
504
|
plugins: [
|
|
440
|
-
new NodePolyfillPlugin(
|
|
505
|
+
new NodePolyfillPlugin({
|
|
506
|
+
excludeAliases: builderType === "electron" ? ["process"] : []
|
|
507
|
+
}),
|
|
441
508
|
new NamedChunksPlugin(),
|
|
442
509
|
new DedupeModuleResolvePlugin(),
|
|
443
510
|
new webpack.ProgressPlugin({
|
|
@@ -451,7 +518,6 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
451
518
|
}
|
|
452
519
|
}
|
|
453
520
|
}),
|
|
454
|
-
new CommonJsUsageWarnPlugin(),
|
|
455
521
|
...watch ? [] : [
|
|
456
522
|
new LicenseWebpackPlugin({
|
|
457
523
|
stats: { warnings: false, errors: false },
|
|
@@ -462,7 +528,7 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
462
528
|
],
|
|
463
529
|
new CopyWebpackPlugin({
|
|
464
530
|
patterns: [
|
|
465
|
-
...["favicon.ico", "assets/", "manifest.
|
|
531
|
+
...["favicon.ico", "assets/", "manifest.json"].map((item) => ({
|
|
466
532
|
context: this._rootPath,
|
|
467
533
|
to: item,
|
|
468
534
|
from: `src/${item}`,
|
|
@@ -479,11 +545,31 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
479
545
|
},
|
|
480
546
|
priority: 0
|
|
481
547
|
})),
|
|
482
|
-
...
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
548
|
+
...builderType === "cordova" && watch ? this._cordova.platforms.mapMany((platform) => [
|
|
549
|
+
{
|
|
550
|
+
context: this._cordova.cordovaPath,
|
|
551
|
+
to: `cordova-${platform}/plugins`,
|
|
552
|
+
from: `platforms/${platform}/platform_www/plugins`,
|
|
553
|
+
noErrorOnMissing: true
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
context: this._cordova.cordovaPath,
|
|
557
|
+
to: `cordova-${platform}/cordova.js`,
|
|
558
|
+
from: `platforms/${platform}/platform_www/cordova.js`
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
context: this._cordova.cordovaPath,
|
|
562
|
+
to: `cordova-${platform}/cordova_plugins.js`,
|
|
563
|
+
from: `platforms/${platform}/platform_www/cordova_plugins.js`,
|
|
564
|
+
noErrorOnMissing: true
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
context: this._cordova.cordovaPath,
|
|
568
|
+
to: `cordova-${platform}/config.xml`,
|
|
569
|
+
from: `platforms/${platform}/www/config.xml`,
|
|
570
|
+
noErrorOnMissing: true
|
|
571
|
+
}
|
|
572
|
+
]) : []
|
|
487
573
|
]
|
|
488
574
|
}),
|
|
489
575
|
...watch ? [
|
|
@@ -536,7 +622,7 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
536
622
|
cache: {
|
|
537
623
|
enabled: true,
|
|
538
624
|
basePath: cacheBasePath,
|
|
539
|
-
path:
|
|
625
|
+
path: path.resolve(cacheBasePath, "index-webpack")
|
|
540
626
|
},
|
|
541
627
|
postTransform: undefined,
|
|
542
628
|
optimization: {
|
|
@@ -591,4 +677,4 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
591
677
|
return this._npmConfigMap.get(pkgPath);
|
|
592
678
|
}
|
|
593
679
|
}
|
|
594
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlDbGllbnRCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1aWxkZXIvU2RDbGlDbGllbnRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDMUcsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHdDQUF3QyxFQUN6QyxNQUFNLG1EQUFtRCxDQUFDO0FBQzNELE9BQU8saUJBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxvQkFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2RUFBNkUsQ0FBQztBQUNySCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUMvRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDN0YsT0FBTyxHQUFHLE1BQU0sd0JBQXdCLENBQUM7QUFDekMsT0FBTyxHQUFHLE1BQU0sd0JBQXdCLENBQUM7QUFFekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxrQkFBa0IsTUFBTSw4QkFBOEIsQ0FB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
|
|
680
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlDbGllbnRCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1aWxkZXIvU2RDbGlDbGllbnRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDMUcsT0FBTyxFQUNMLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsd0NBQXdDLEVBQ3pDLE1BQU0sbURBQW1ELENBQUM7QUFDM0QsT0FBTyxpQkFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLG9CQUFvQixNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZFQUE2RSxDQUFDO0FBQ3JILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RixPQUFPLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQztBQUN6QyxPQUFPLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQztBQUV6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLGtCQUFrQixNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8s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
|