@simplysm/sd-cli 7.0.26 → 7.0.37

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.
@@ -0,0 +1,20 @@
1
+ /// <reference types="node" />
2
+ import { ISdCliPackageBuildResult, ISdCliServerPackageConfig } from "../commons";
3
+ import { EventEmitter } from "events";
4
+ import { NextHandleFunction } from "connect";
5
+ export declare class SdCliClientBuilder extends EventEmitter {
6
+ private readonly _rootPath;
7
+ private readonly _config;
8
+ private readonly _workspaceRootPath;
9
+ private readonly _logger;
10
+ private readonly _tsconfigFilePath;
11
+ private readonly _parsedTsconfig;
12
+ private readonly _npmConfigMap;
13
+ constructor(_rootPath: string, _config: ISdCliServerPackageConfig, _workspaceRootPath: string);
14
+ on(event: "change", listener: () => void): this;
15
+ on(event: "complete", listener: (results: ISdCliPackageBuildResult[]) => void): this;
16
+ watchAsync(): Promise<NextHandleFunction[]>;
17
+ buildAsync(): Promise<ISdCliPackageBuildResult[]>;
18
+ private _getWebpackCommonConfig;
19
+ private _getNpmConfig;
20
+ }
@@ -0,0 +1,392 @@
1
+ import { EventEmitter } from "events";
2
+ import { FsUtil, Logger, PathUtil } from "@simplysm/sd-core-node";
3
+ import webpack from "webpack";
4
+ import path from "path";
5
+ import ts from "typescript";
6
+ import { SdCliBuildResultUtil } from "../utils/SdCliBuildResultUtil";
7
+ import { NamedChunksPlugin } from "@angular-devkit/build-angular/src/webpack/plugins/named-chunks-plugin";
8
+ import { AnyComponentStyleBudgetChecker, CommonJsUsageWarnPlugin, DedupeModuleResolvePlugin, SuppressExtractedTextChunksWebpackPlugin } from "@angular-devkit/build-angular/src/webpack/plugins";
9
+ import CopyWebpackPlugin from "copy-webpack-plugin";
10
+ import MiniCssExtractPlugin from "mini-css-extract-plugin";
11
+ import { AngularWebpackPlugin } from "@ngtools/webpack";
12
+ import { IndexHtmlWebpackPlugin } from "@angular-devkit/build-angular/src/webpack/plugins/index-html-webpack-plugin";
13
+ import { createHash } from "crypto";
14
+ import { SassWorkerImplementation } from "@angular-devkit/build-angular/src/sass/sass-service";
15
+ import { HmrLoader } from "@angular-devkit/build-angular/src/webpack/plugins/hmr/hmr-loader";
16
+ import wdm from "webpack-dev-middleware";
17
+ import whm from "webpack-hot-middleware";
18
+ export class SdCliClientBuilder extends EventEmitter {
19
+ constructor(_rootPath, _config, _workspaceRootPath) {
20
+ super();
21
+ this._rootPath = _rootPath;
22
+ this._config = _config;
23
+ this._workspaceRootPath = _workspaceRootPath;
24
+ this._logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
25
+ this._npmConfigMap = new Map();
26
+ // tsconfig
27
+ this._tsconfigFilePath = path.resolve(this._rootPath, "tsconfig-build.json");
28
+ const tsconfig = FsUtil.readJson(this._tsconfigFilePath);
29
+ this._parsedTsconfig = ts.parseJsonConfigFileContent(tsconfig, ts.sys, this._rootPath);
30
+ }
31
+ on(event, listener) {
32
+ return super.on(event, listener);
33
+ }
34
+ async watchAsync() {
35
+ // DIST 비우기
36
+ await FsUtil.removeAsync(this._parsedTsconfig.options.outDir);
37
+ // 빌드 준비
38
+ const webpackConfig = this._getWebpackCommonConfig(true);
39
+ const compiler = webpack(webpackConfig);
40
+ return await new Promise((resolve, reject) => {
41
+ compiler.hooks.watchRun.tapAsync(this.constructor.name, (args, callback) => {
42
+ this.emit("change");
43
+ callback();
44
+ this._logger.debug("Webpack 빌드 수행...");
45
+ });
46
+ compiler.hooks.failed.tap(this.constructor.name, (err) => {
47
+ reject(err);
48
+ return;
49
+ });
50
+ compiler.hooks.done.tap(this.constructor.name, (stats) => {
51
+ // 결과 반환
52
+ const results = SdCliBuildResultUtil.convertFromWebpackStats(stats);
53
+ this.emit("complete", results);
54
+ // 마무리
55
+ this._logger.debug("Webpack 빌드 완료");
56
+ resolve([devMiddleware, hotMiddleware]);
57
+ });
58
+ const devMiddleware = wdm(compiler, {
59
+ publicPath: webpackConfig.output.publicPath,
60
+ index: "index.html",
61
+ stats: false
62
+ });
63
+ const hotMiddleware = whm(compiler, {
64
+ path: `${webpackConfig.output.publicPath}__webpack_hmr`,
65
+ log: false
66
+ });
67
+ });
68
+ }
69
+ async buildAsync() {
70
+ // DIST 비우기
71
+ await FsUtil.removeAsync(this._parsedTsconfig.options.outDir);
72
+ // 빌드
73
+ this._logger.debug("Webpack 빌드 수행...");
74
+ const webpackConfig = this._getWebpackCommonConfig(false);
75
+ const compiler = webpack(webpackConfig);
76
+ const buildResults = await new Promise((resolve, reject) => {
77
+ compiler.run((err, stats) => {
78
+ if (err != null || stats == null) {
79
+ reject(err);
80
+ return;
81
+ }
82
+ // 결과 반환
83
+ const results = SdCliBuildResultUtil.convertFromWebpackStats(stats);
84
+ resolve(results);
85
+ });
86
+ });
87
+ // 마무리
88
+ this._logger.debug("Webpack 빌드 완료");
89
+ return buildResults;
90
+ }
91
+ _getWebpackCommonConfig(watch) {
92
+ console.log(watch);
93
+ const npmConfig = this._getNpmConfig(this._rootPath);
94
+ const pkgVersion = npmConfig.version;
95
+ const pkgKey = npmConfig.name.split("/").last();
96
+ const publicPath = `/${pkgKey}/`;
97
+ const cacheBasePath = path.resolve(this._rootPath, ".angular");
98
+ const cachePath = path.resolve(cacheBasePath, pkgVersion);
99
+ const distPath = this._parsedTsconfig.options.outDir;
100
+ const sassImplementation = new SassWorkerImplementation();
101
+ return {
102
+ plugins: [
103
+ new NamedChunksPlugin(),
104
+ new DedupeModuleResolvePlugin(),
105
+ /*new webpack.ProgressPlugin({
106
+ handler: (per: number, msg: string, ...args: string[]) => {
107
+ const phaseText = msg ? ` - phase: ${msg}` : "";
108
+ const argsText = args.length > 0 ? ` - args: [${args.join(", ")}]` : "";
109
+ this._logger.debug(`Webpack 빌드 수행중...(${Math.round(per * 100)}%)${phaseText}${argsText}`);
110
+ }
111
+ }),*/
112
+ new CommonJsUsageWarnPlugin(),
113
+ new CopyWebpackPlugin({
114
+ patterns: [
115
+ ...["favicon.ico", "assets/", "manifest.webmanifest"].map((item) => ({
116
+ context: this._rootPath,
117
+ to: item,
118
+ from: `src/${item}`,
119
+ noErrorOnMissing: true,
120
+ force: true,
121
+ globOptions: {
122
+ dot: true,
123
+ followSymbolicLinks: false,
124
+ ignore: [
125
+ ".gitkeep",
126
+ "**/.DS_Store",
127
+ "**/Thumbs.db"
128
+ ].map((i) => PathUtil.posix(this._rootPath, i))
129
+ },
130
+ priority: 0
131
+ }))
132
+ ]
133
+ }),
134
+ new webpack.SourceMapDevToolPlugin({
135
+ filename: "[file].map",
136
+ include: [/js$/, /css$/],
137
+ sourceRoot: "webpack:///",
138
+ moduleFilenameTemplate: "[resource-path]",
139
+ append: undefined,
140
+ }),
141
+ new AngularWebpackPlugin({
142
+ tsconfig: this._tsconfigFilePath,
143
+ compilerOptions: {
144
+ sourceMap: true,
145
+ declaration: false,
146
+ declarationMap: false,
147
+ preserveSymlinks: false
148
+ },
149
+ jitMode: false,
150
+ emitNgModuleScope: true,
151
+ inlineStyleFileExtension: "scss"
152
+ }),
153
+ new AnyComponentStyleBudgetChecker([]),
154
+ {
155
+ apply: (compiler) => {
156
+ compiler.hooks.shutdown.tap("sass-worker", () => {
157
+ sassImplementation.close();
158
+ });
159
+ }
160
+ },
161
+ new MiniCssExtractPlugin({ filename: "[name].css" }),
162
+ new SuppressExtractedTextChunksWebpackPlugin(),
163
+ // NgBuildAnalyticsPlugin,
164
+ new IndexHtmlWebpackPlugin({
165
+ indexPath: path.resolve(this._rootPath, "src/index.html"),
166
+ outputPath: "index.html",
167
+ baseHref: publicPath,
168
+ entrypoints: [
169
+ ["runtime", true],
170
+ ["polyfills", true],
171
+ ["styles", false],
172
+ ["vendor", true],
173
+ ["main", true]
174
+ ],
175
+ deployUrl: undefined,
176
+ sri: false,
177
+ cache: {
178
+ enabled: true,
179
+ basePath: cacheBasePath,
180
+ path: cachePath
181
+ },
182
+ postTransform: undefined,
183
+ optimization: {
184
+ scripts: false,
185
+ styles: { minify: false, inlineCritical: false },
186
+ fonts: { inline: false }
187
+ },
188
+ crossOrigin: "none",
189
+ lang: undefined
190
+ }),
191
+ new webpack.HotModuleReplacementPlugin()
192
+ ],
193
+ module: {
194
+ strictExportPresence: true,
195
+ parser: { javascript: { url: false, worker: false } },
196
+ rules: [
197
+ {
198
+ test: /\.?(svg|html)$/,
199
+ resourceQuery: /\?ngResource/,
200
+ type: "asset/source"
201
+ },
202
+ {
203
+ test: /[/\\]rxjs[/\\]add[/\\].+\.js$/,
204
+ sideEffects: true,
205
+ },
206
+ {
207
+ test: /\.[cm]?[tj]sx?$/,
208
+ resolve: { fullySpecified: false },
209
+ exclude: [/[/\\](?:core-js|@babel|tslib|web-animations-js|web-streams-polyfill)[/\\]/],
210
+ use: [
211
+ {
212
+ loader: "@angular-devkit/build-angular/src/babel/webpack-loader",
213
+ options: {
214
+ cacheDirectory: path.resolve(cachePath, "babel-webpack"),
215
+ scriptTarget: ts.ScriptTarget.ES2017,
216
+ aot: true,
217
+ optimize: false,
218
+ instrumentCode: undefined
219
+ }
220
+ }
221
+ ],
222
+ },
223
+ {
224
+ test: /\.[cm]?jsx?$/,
225
+ enforce: "pre",
226
+ loader: "source-map-loader",
227
+ options: {
228
+ filterSourceMappingUrl: (_mapUri, resourcePath) => {
229
+ return !resourcePath.includes("node_modules") || (/@simplysm[\\/]sd/).test(resourcePath);
230
+ }
231
+ }
232
+ },
233
+ {
234
+ test: /\.[cm]?tsx?$/,
235
+ loader: "@ngtools/webpack",
236
+ exclude: [/[/\\](?:css-loader|mini-css-extract-plugin|webpack-dev-server|webpack)[/\\]/],
237
+ },
238
+ {
239
+ test: /\.css$/i,
240
+ type: "asset/source"
241
+ },
242
+ {
243
+ test: /\.scss$/i,
244
+ rules: [
245
+ {
246
+ oneOf: [
247
+ {
248
+ use: [
249
+ {
250
+ loader: MiniCssExtractPlugin.loader
251
+ },
252
+ {
253
+ loader: "css-loader",
254
+ options: { url: false, sourceMap: true }
255
+ }
256
+ ],
257
+ include: path.resolve(this._rootPath, "src/styles.scss"),
258
+ resourceQuery: { not: [/\?ngResource/] }
259
+ },
260
+ {
261
+ type: "asset/source"
262
+ }
263
+ ]
264
+ },
265
+ {
266
+ use: [
267
+ {
268
+ loader: "resource-url-loader",
269
+ options: { sourceMap: true }
270
+ },
271
+ {
272
+ loader: "sass-loader",
273
+ options: {
274
+ implementation: sassImplementation,
275
+ sourceMap: true,
276
+ sassOptions: {
277
+ fiber: false,
278
+ precision: 8,
279
+ includePaths: [],
280
+ outputStyle: "expanded",
281
+ quietDeps: true,
282
+ verbose: undefined
283
+ }
284
+ }
285
+ }
286
+ ]
287
+ }
288
+ ]
289
+ },
290
+ {
291
+ loader: HmrLoader,
292
+ include: [path.resolve(this._rootPath, "src/main.ts")]
293
+ }
294
+ ]
295
+ },
296
+ mode: "development",
297
+ devtool: false,
298
+ target: ["web", "es2015"],
299
+ profile: false,
300
+ resolve: {
301
+ roots: [this._rootPath],
302
+ extensions: [".ts", ".tsx", ".mjs", ".js"],
303
+ symlinks: true,
304
+ modules: [this._workspaceRootPath, "node_modules"],
305
+ mainFields: ["es2015", "browser", "module", "main"],
306
+ conditionNames: ["es2015", "..."]
307
+ },
308
+ resolveLoader: {
309
+ symlinks: true
310
+ },
311
+ context: this._workspaceRootPath,
312
+ entry: {
313
+ main: [
314
+ `webpack-hot-middleware/client?path=${publicPath}__webpack_hmr&timeout=20000&reload=true&overlay=true`,
315
+ path.resolve(this._rootPath, "src/main.ts")
316
+ ],
317
+ polyfills: [path.resolve(this._rootPath, "src/polyfills.ts")],
318
+ styles: [path.resolve(this._rootPath, "src/styles.scss")]
319
+ },
320
+ output: {
321
+ uniqueName: pkgKey,
322
+ hashFunction: "xxhash64",
323
+ clean: true,
324
+ path: distPath,
325
+ publicPath,
326
+ filename: "[name].js",
327
+ chunkFilename: "[name].js",
328
+ libraryTarget: undefined,
329
+ crossOriginLoading: false,
330
+ trustedTypes: "angular#bundler",
331
+ scriptType: "module",
332
+ },
333
+ watch: false,
334
+ watchOptions: { poll: undefined, ignored: undefined },
335
+ performance: { hints: false },
336
+ ignoreWarnings: [
337
+ /Failed to parse source map from/,
338
+ /Add postcss as project dependency/,
339
+ /"@charset" must be the first rule in the file/,
340
+ ],
341
+ experiments: { backCompat: false, syncWebAssembly: true, asyncWebAssembly: true },
342
+ infrastructureLogging: { level: "error" },
343
+ stats: "errors-warnings",
344
+ cache: {
345
+ type: "filesystem",
346
+ profile: undefined,
347
+ cacheDirectory: path.resolve(cachePath, "angular-webpack"),
348
+ maxMemoryGenerations: 1,
349
+ name: createHash("sha1").update(pkgVersion).digest("hex")
350
+ },
351
+ optimization: {
352
+ minimizer: [],
353
+ moduleIds: "deterministic",
354
+ chunkIds: "named",
355
+ emitOnErrors: false,
356
+ runtimeChunk: "single",
357
+ splitChunks: {
358
+ maxAsyncRequests: Infinity,
359
+ cacheGroups: {
360
+ default: {
361
+ chunks: "async",
362
+ minChunks: 2,
363
+ priority: 10
364
+ },
365
+ common: {
366
+ name: "common",
367
+ chunks: "async",
368
+ minChunks: 2,
369
+ enforce: true,
370
+ priority: 5
371
+ },
372
+ vendors: false,
373
+ defaultVendors: {
374
+ name: "vendor",
375
+ chunks: (chunk) => chunk.name === "main",
376
+ enforce: true,
377
+ test: /[\\/]node_modules[\\/]/
378
+ }
379
+ }
380
+ }
381
+ },
382
+ node: false
383
+ };
384
+ }
385
+ _getNpmConfig(pkgPath) {
386
+ if (!this._npmConfigMap.has(pkgPath)) {
387
+ this._npmConfigMap.set(pkgPath, FsUtil.readJson(path.resolve(pkgPath, "package.json")));
388
+ }
389
+ return this._npmConfigMap.get(pkgPath);
390
+ }
391
+ }
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlDbGllbnRCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1aWxkZXIvU2RDbGlDbGllbnRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDMUcsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLHdDQUF3QyxFQUN6QyxNQUFNLG1EQUFtRCxDQUFDO0FBQzNELE9BQU8saUJBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxvQkFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2RUFBNkUsQ0FBQztBQUNySCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RixPQUFPLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQztBQUN6QyxPQUFPLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQztBQUd6QyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsWUFBWTtJQU9s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
@@ -14,9 +14,11 @@ export declare class SdCliServerBuilder extends EventEmitter {
14
14
  on(event: "complete", listener: (results: ISdCliPackageBuildResult[]) => void): this;
15
15
  watchAsync(): Promise<void>;
16
16
  buildAsync(): Promise<ISdCliPackageBuildResult[]>;
17
- private get _webpackCommonConfig();
18
- private _getWebpackWatchConfig;
19
- private _getWebpackBuildConfig;
20
- private _findExternalModules;
17
+ private _writeDistConfigFileAsync;
18
+ private _writeDistPm2ConfigFileAsync;
19
+ private _writeDistIisConfigFileAsync;
20
+ private _writeDistNpmConfigFileAsync;
21
+ private _getWebpackConfig;
22
+ private _getExternalModuleNames;
21
23
  private _getNpmConfig;
22
24
  }