@simplysm/sd-cli 7.0.37 → 7.0.41

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.
@@ -6,12 +6,13 @@ import { SdCliTsLibBuilder } from "../builder/SdCliTsLibBuilder";
6
6
  import { SdCliJsLibBuilder } from "../builder/SdCliJsLibBuilder";
7
7
  import { SdCliServerBuilder } from "../builder/SdCliServerBuilder";
8
8
  import { SdCliNpmConfigUtil } from "../utils/SdCliNpmConfigUtil";
9
+ import { SdCliClientBuilder } from "../builder/SdCliClientBuilder";
9
10
  export class SdCliPackage extends EventEmitter {
10
- constructor(_workspaceRootPath, rootPath, _config) {
11
+ constructor(_workspaceRootPath, rootPath, config) {
11
12
  super();
12
13
  this._workspaceRootPath = _workspaceRootPath;
13
14
  this.rootPath = rootPath;
14
- this._config = _config;
15
+ this.config = config;
15
16
  const npmConfigFilePath = path.resolve(this.rootPath, "package.json");
16
17
  this._npmConfig = FsUtil.readJson(npmConfigFilePath);
17
18
  }
@@ -24,9 +25,6 @@ export class SdCliPackage extends EventEmitter {
24
25
  get main() {
25
26
  return this._npmConfig.main;
26
27
  }
27
- get type() {
28
- return this._config.type;
29
- }
30
28
  get allDependencies() {
31
29
  return [
32
30
  ...SdCliNpmConfigUtil.getDependencies(this._npmConfig).defaults,
@@ -55,7 +53,7 @@ export class SdCliPackage extends EventEmitter {
55
53
  await FsUtil.writeJsonAsync(npmConfigFilePath, this._npmConfig, { space: 2 });
56
54
  }
57
55
  async watchAsync() {
58
- await (await this._createBuilderAsync())
56
+ return await (await this._createBuilderAsync())
59
57
  .on("change", () => {
60
58
  this.emit("change");
61
59
  })
@@ -68,7 +66,7 @@ export class SdCliPackage extends EventEmitter {
68
66
  return await (await this._createBuilderAsync()).buildAsync();
69
67
  }
70
68
  async publishAsync() {
71
- if (this._config.type === "library" && this._config.publish === "npm") {
69
+ if (this.config.type === "library" && this.config.publish === "npm") {
72
70
  await SdProcess.spawnAsync("npm publish --quiet --access public", { cwd: this.rootPath });
73
71
  }
74
72
  }
@@ -77,12 +75,15 @@ export class SdCliPackage extends EventEmitter {
77
75
  if (isTs) {
78
76
  await this._genBuildTsconfigAsync();
79
77
  }
80
- if (this._config.type === "library") {
78
+ if (this.config.type === "library") {
81
79
  // const isAngular = isTs && this.allDependencies.includes("@angular/core");
82
80
  return isTs ? new SdCliTsLibBuilder(this.rootPath) : new SdCliJsLibBuilder(this.rootPath);
83
81
  }
82
+ else if (this.config.type === "server") {
83
+ return new SdCliServerBuilder(this.rootPath, this.config, this._workspaceRootPath);
84
+ }
84
85
  else {
85
- return new SdCliServerBuilder(this.rootPath, this._config, this._workspaceRootPath);
86
+ return new SdCliClientBuilder(this.rootPath, this.config, this._workspaceRootPath);
86
87
  }
87
88
  }
88
89
  async _genBuildTsconfigAsync() {
@@ -96,4 +97,4 @@ export class SdCliPackage extends EventEmitter {
96
97
  await FsUtil.writeJsonAsync(buildTsconfigFilePath, buildTsconfig, { space: 2 });
97
98
  }
98
99
  }
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlQYWNrYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhY2thZ2VzL1NkQ2xpUGFja2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRSxNQUFNLE9BQU8sWUFBYSxTQUFRLFlBQVk7SUEwQjVDLFlBQW9DLGtCQUEwQixFQUMzQixRQUFnQixFQUNmLE9BQTRCO1FBQzlELEtBQUssRUFBRSxDQUFDO1FBSDBCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFHOUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQTlCRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLElB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
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlQYWNrYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhY2thZ2VzL1NkQ2xpUGFja2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUduRSxNQUFNLE9BQU8sWUFBYSxTQUFRLFlBQVk7SUFzQjVDLFlBQW9DLGtCQUEwQixFQUMzQixRQUFnQixFQUNoQixNQUEyQjtRQUM1RCxLQUFLLEVBQUUsQ0FBQztRQUgwQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUc1RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBMUJELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFB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
@@ -8,7 +8,7 @@ export class SdCliBuildResultUtil {
8
8
  : undefined;
9
9
  if (!severity)
10
10
  return undefined;
11
- const code = "TS" + diag.code;
11
+ const code = `TS${diag.code}`;
12
12
  const message = ts.flattenDiagnosticMessageText(diag.messageText, os.EOL);
13
13
  const filePath = diag.file ? path.resolve(diag.file.fileName) : undefined;
14
14
  const position = diag.file && diag.start !== undefined ? diag.file.getLineAndCharacterOfPosition(diag.start) : undefined;
@@ -38,8 +38,8 @@ export class SdCliBuildResultUtil {
38
38
  static _convertFromWebpackError(severity, err) {
39
39
  return {
40
40
  filePath: err.file,
41
- line: err.loc["start"].line,
42
- char: err.loc["start"].column,
41
+ line: err.file ? err.loc["start"]?.line : undefined,
42
+ char: err.file ? err.loc["start"]?.column : undefined,
43
43
  code: err.name,
44
44
  severity,
45
45
  message: err.message
@@ -57,4 +57,4 @@ export class SdCliBuildResultUtil {
57
57
  return str;
58
58
  }
59
59
  }
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlCdWlsZFJlc3VsdFV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvU2RDbGlCdWlsZFJlc3VsdFV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBSTdCLE1BQU0sT0FBTyxvQkFBb0I7SUFDeEIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQW1CO1FBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTztZQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUMzRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRzFFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzFFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENB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
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlCdWlsZFJlc3VsdFV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvU2RDbGlCdWlsZFJlc3VsdFV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBSTdCLE1BQU0sT0FBTyxvQkFBb0I7SUFDeEIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQW1CO1FBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTztZQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUMzRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFaEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRzFFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzFFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/sd-cli",
3
- "version": "7.0.37",
3
+ "version": "7.0.41",
4
4
  "description": "심플리즘 패키지 - CLI",
5
5
  "author": "김석래",
6
6
  "repository": {
@@ -43,17 +43,20 @@
43
43
  "webpack-dev-middleware": "^5.3.1",
44
44
  "webpack-hot-middleware": "^2.25.1",
45
45
  "css-loader": "^6.6.0",
46
- "resource-url-loader": "^1.1.5",
47
- "sass-loader": "^12.4.0"
46
+ "resolve-url-loader": "^5.0.0",
47
+ "sass-loader": "^12.4.0",
48
+ "connect": "^3.7.0",
49
+ "node-polyfill-webpack-plugin": "^1.1.4"
48
50
  },
49
51
  "devDependencies": {
50
52
  "@types/semver": "^7.3.9",
51
53
  "@types/yargs": "^17.0.8",
52
- "@types/webpack-hot-middleware": "^2.25.5"
54
+ "@types/webpack-hot-middleware": "^2.25.5",
55
+ "@types/connect": "^3.4.35"
53
56
  },
54
57
  "peerDependencies": {
55
- "@simplysm/sd-core-common": "7.0.37",
56
- "@simplysm/sd-core-node": "7.0.37",
57
- "@simplysm/sd-service": "7.0.37"
58
+ "@simplysm/sd-core-common": "7.0.41",
59
+ "@simplysm/sd-core-node": "7.0.41",
60
+ "@simplysm/sd-service": "7.0.41"
58
61
  }
59
62
  }
package/src/bin/sd-cli.ts CHANGED
@@ -145,6 +145,7 @@ const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
145
145
  confFileRelPath: argv.config ?? "simplysm.json",
146
146
  optNames: argv.options ?? []
147
147
  });
148
+ process.exit(0);
148
149
  }
149
150
  else if (argv._[0] === "publish") {
150
151
  await new SdCliWorkspace(process.cwd())
@@ -159,4 +160,5 @@ const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
159
160
  }
160
161
  })().catch((err) => {
161
162
  logger.error(err);
163
+ process.exit(1);
162
164
  });
@@ -17,7 +17,7 @@ export class SdCliNgCacheCompilerHost {
17
17
  };
18
18
 
19
19
  cacheCompilerHost["transformResource"] = async (data, context) => {
20
- if (context.resourceFile || context.type !== "style") {
20
+ if (context.resourceFile != null || context.type !== "style") {
21
21
  return null;
22
22
  }
23
23
 
@@ -25,10 +25,10 @@ export class SdCliNgCacheCompilerHost {
25
25
  if (cache.styleContent === undefined) {
26
26
  cache.styleContent = (
27
27
  await sass.compileStringAsync(data, {
28
- url: new URL(context.containingFile + ".sd.scss"),
28
+ url: new URL((context.containingFile as string) + ".sd.scss"),
29
29
  importer: {
30
30
  findFileUrl: (url) => {
31
- if (!url.startsWith("~")) return null;
31
+ if (!url.startsWith("~")) return pathToFileURL(url);
32
32
  return new URL(url.substring(1), pathToFileURL("node_modules"));
33
33
  }
34
34
  }
@@ -1,4 +1,4 @@
1
- import { INpmConfig, ISdCliPackageBuildResult, ISdCliServerPackageConfig } from "../commons";
1
+ import { INpmConfig, ISdCliClientPackageConfig, ISdCliPackageBuildResult } from "../commons";
2
2
  import { EventEmitter } from "events";
3
3
  import { FsUtil, Logger, PathUtil } from "@simplysm/sd-core-node";
4
4
  import webpack from "webpack";
@@ -16,12 +16,15 @@ import CopyWebpackPlugin from "copy-webpack-plugin";
16
16
  import MiniCssExtractPlugin from "mini-css-extract-plugin";
17
17
  import { AngularWebpackPlugin } from "@ngtools/webpack";
18
18
  import { IndexHtmlWebpackPlugin } from "@angular-devkit/build-angular/src/webpack/plugins/index-html-webpack-plugin";
19
- import { createHash } from "crypto";
20
19
  import { SassWorkerImplementation } from "@angular-devkit/build-angular/src/sass/sass-service";
21
20
  import { HmrLoader } from "@angular-devkit/build-angular/src/webpack/plugins/hmr/hmr-loader";
22
21
  import wdm from "webpack-dev-middleware";
23
22
  import whm from "webpack-hot-middleware";
24
23
  import { NextHandleFunction } from "connect";
24
+ import { LicenseWebpackPlugin } from "license-webpack-plugin";
25
+ import { Type } from "@angular-devkit/build-angular";
26
+ import NodePolyfillPlugin from "node-polyfill-webpack-plugin";
27
+ import { createHash } from "crypto";
25
28
 
26
29
  export class SdCliClientBuilder extends EventEmitter {
27
30
  private readonly _logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
@@ -31,7 +34,7 @@ export class SdCliClientBuilder extends EventEmitter {
31
34
  private readonly _npmConfigMap = new Map<string, INpmConfig>();
32
35
 
33
36
  public constructor(private readonly _rootPath: string,
34
- private readonly _config: ISdCliServerPackageConfig,
37
+ private readonly _config: ISdCliClientPackageConfig,
35
38
  private readonly _workspaceRootPath: string) {
36
39
  super();
37
40
 
@@ -52,7 +55,7 @@ export class SdCliClientBuilder extends EventEmitter {
52
55
  await FsUtil.removeAsync(this._parsedTsconfig.options.outDir!);
53
56
 
54
57
  // 빌드 준비
55
- const webpackConfig = this._getWebpackCommonConfig(true);
58
+ const webpackConfig = this._getWebpackConfig(true);
56
59
  const compiler = webpack(webpackConfig);
57
60
  return await new Promise<NextHandleFunction[]>((resolve, reject) => {
58
61
  compiler.hooks.watchRun.tapAsync(this.constructor.name, (args, callback) => {
@@ -96,7 +99,7 @@ export class SdCliClientBuilder extends EventEmitter {
96
99
 
97
100
  // 빌드
98
101
  this._logger.debug("Webpack 빌드 수행...");
99
- const webpackConfig = this._getWebpackCommonConfig(false);
102
+ const webpackConfig = this._getWebpackConfig(false);
100
103
  const compiler = webpack(webpackConfig);
101
104
  const buildResults = await new Promise<ISdCliPackageBuildResult[]>((resolve, reject) => {
102
105
  compiler.run((err, stats) => {
@@ -116,9 +119,7 @@ export class SdCliClientBuilder extends EventEmitter {
116
119
  return buildResults;
117
120
  }
118
121
 
119
- private _getWebpackCommonConfig(watch: boolean): webpack.Configuration {
120
- console.log(watch);
121
-
122
+ private _getWebpackConfig(watch: boolean): webpack.Configuration {
122
123
  const npmConfig = this._getNpmConfig(this._rootPath)!;
123
124
  const pkgVersion = npmConfig.version;
124
125
 
@@ -132,8 +133,102 @@ export class SdCliClientBuilder extends EventEmitter {
132
133
 
133
134
  const sassImplementation = new SassWorkerImplementation();
134
135
 
136
+ const mainFilePath = path.resolve(this._rootPath, "src/main.ts");
137
+ const polyfillsFilePath = path.resolve(this._rootPath, "src/polyfills.ts");
138
+ const stylesFilePath = path.resolve(this._rootPath, "src/styles.scss");
139
+
135
140
  return {
141
+ mode: watch ? "development" : "production",
142
+ devtool: false,
143
+ target: ["web", "es2015"],
144
+ profile: false,
145
+ resolve: {
146
+ roots: [this._rootPath],
147
+ extensions: [".ts", ".tsx", ".mjs", ".js"],
148
+ symlinks: true,
149
+ modules: [this._workspaceRootPath, "node_modules"],
150
+ mainFields: ["es2015", "browser", "module", "main"],
151
+ conditionNames: ["es2015", "..."]
152
+ },
153
+ resolveLoader: {
154
+ symlinks: true
155
+ },
156
+ context: this._workspaceRootPath,
157
+ entry: {
158
+ main: [
159
+ ...watch ? [
160
+ `webpack-hot-middleware/client?path=${publicPath}__webpack_hmr&timeout=20000&reload=true&overlay=true`
161
+ ] : [],
162
+ mainFilePath
163
+ ],
164
+ ...FsUtil.exists(polyfillsFilePath) ? { polyfills: polyfillsFilePath } : {},
165
+ ...FsUtil.exists(stylesFilePath) ? { styles: stylesFilePath } : {}
166
+ },
167
+ output: {
168
+ uniqueName: pkgKey,
169
+ hashFunction: "xxhash64",
170
+ clean: true,
171
+ path: distPath,
172
+ publicPath,
173
+ filename: "[name].js",
174
+ chunkFilename: "[name].js",
175
+ libraryTarget: undefined,
176
+ crossOriginLoading: false,
177
+ trustedTypes: "angular#bundler",
178
+ scriptType: "module"
179
+ },
180
+ watch: false,
181
+ watchOptions: { poll: undefined, ignored: undefined },
182
+ performance: { hints: false },
183
+ ignoreWarnings: [
184
+ /Failed to parse source map from/,
185
+ /Add postcss as project dependency/,
186
+ /"@charset" must be the first rule in the file/
187
+ ],
188
+ experiments: { backCompat: false, syncWebAssembly: true, asyncWebAssembly: true },
189
+ infrastructureLogging: { level: "error" },
190
+ stats: "errors-warnings",
191
+ cache: {
192
+ type: "filesystem",
193
+ profile: watch ? undefined : false,
194
+ cacheDirectory: path.resolve(cachePath, "angular-webpack"),
195
+ maxMemoryGenerations: 1,
196
+ name: createHash("sha1").update(pkgVersion).digest("hex")
197
+ },
198
+ node: false,
199
+ optimization: {
200
+ minimizer: [],
201
+ moduleIds: "deterministic",
202
+ chunkIds: watch ? "named" : "deterministic",
203
+ emitOnErrors: watch,
204
+ runtimeChunk: "single",
205
+ splitChunks: {
206
+ maxAsyncRequests: Infinity,
207
+ cacheGroups: {
208
+ default: {
209
+ chunks: "async",
210
+ minChunks: 2,
211
+ priority: 10
212
+ },
213
+ common: {
214
+ name: "common",
215
+ chunks: "async",
216
+ minChunks: 2,
217
+ enforce: true,
218
+ priority: 5
219
+ },
220
+ vendors: false,
221
+ defaultVendors: watch ? {
222
+ name: "vendor",
223
+ chunks: (chunk) => chunk.name === "main",
224
+ enforce: true,
225
+ test: /[\\/]node_modules[\\/]/
226
+ } : false
227
+ }
228
+ }
229
+ },
136
230
  plugins: [
231
+ new NodePolyfillPlugin(),
137
232
  new NamedChunksPlugin(),
138
233
  new DedupeModuleResolvePlugin(),
139
234
  /*new webpack.ProgressPlugin({
@@ -144,6 +239,14 @@ export class SdCliClientBuilder extends EventEmitter {
144
239
  }
145
240
  }),*/
146
241
  new CommonJsUsageWarnPlugin(),
242
+ ...watch ? [] : [
243
+ new LicenseWebpackPlugin({
244
+ stats: { warnings: false, errors: false },
245
+ perChunkOutput: false,
246
+ outputFilename: "3rdpartylicenses.txt",
247
+ skipChildCompilers: true
248
+ })
249
+ ],
147
250
  new CopyWebpackPlugin({
148
251
  patterns: [
149
252
  ...["favicon.ico", "assets/", "manifest.webmanifest"].map((item) => ({
@@ -165,26 +268,30 @@ export class SdCliClientBuilder extends EventEmitter {
165
268
  }))
166
269
  ]
167
270
  }),
168
- new webpack.SourceMapDevToolPlugin({
169
- filename: "[file].map",
170
- include: [/js$/, /css$/],
171
- sourceRoot: "webpack:///",
172
- moduleFilenameTemplate: "[resource-path]",
173
- append: undefined,
174
- }),
271
+ ...watch ? [
272
+ new webpack.SourceMapDevToolPlugin({
273
+ filename: "[file].map",
274
+ include: [/js$/, /css$/],
275
+ sourceRoot: "webpack:///",
276
+ moduleFilenameTemplate: "[resource-path]",
277
+ append: undefined
278
+ })
279
+ ] : [],
175
280
  new AngularWebpackPlugin({
176
281
  tsconfig: this._tsconfigFilePath,
177
282
  compilerOptions: {
178
- sourceMap: true,
283
+ sourceMap: watch,
179
284
  declaration: false,
180
285
  declarationMap: false,
181
286
  preserveSymlinks: false
182
287
  },
183
288
  jitMode: false,
184
- emitNgModuleScope: true,
289
+ emitNgModuleScope: watch,
185
290
  inlineStyleFileExtension: "scss"
186
291
  }),
187
- new AnyComponentStyleBudgetChecker([]),
292
+ new AnyComponentStyleBudgetChecker(watch ? [] : [
293
+ { type: Type.AnyComponentStyle, maximumWarning: "2kb", maximumError: "4kb" }
294
+ ]),
188
295
  {
189
296
  apply: (compiler: webpack.Compiler) => {
190
297
  compiler.hooks.shutdown.tap("sass-worker", () => {
@@ -215,14 +322,16 @@ export class SdCliClientBuilder extends EventEmitter {
215
322
  },
216
323
  postTransform: undefined,
217
324
  optimization: {
218
- scripts: false,
219
- styles: { minify: false, inlineCritical: false },
220
- fonts: { inline: false }
325
+ scripts: !watch,
326
+ styles: { minify: !watch, inlineCritical: !watch },
327
+ fonts: { inline: !watch }
221
328
  },
222
329
  crossOrigin: "none",
223
330
  lang: undefined
224
331
  }),
225
- new webpack.HotModuleReplacementPlugin()
332
+ ...watch ? [
333
+ new webpack.HotModuleReplacementPlugin()
334
+ ] : []
226
335
  ] as any[],
227
336
  module: {
228
337
  strictExportPresence: true,
@@ -235,7 +344,7 @@ export class SdCliClientBuilder extends EventEmitter {
235
344
  },
236
345
  {
237
346
  test: /[/\\]rxjs[/\\]add[/\\].+\.js$/,
238
- sideEffects: true,
347
+ sideEffects: true
239
348
  },
240
349
  {
241
350
  test: /\.[cm]?[tj]sx?$/,
@@ -248,26 +357,28 @@ export class SdCliClientBuilder extends EventEmitter {
248
357
  cacheDirectory: path.resolve(cachePath, "babel-webpack"),
249
358
  scriptTarget: ts.ScriptTarget.ES2017,
250
359
  aot: true,
251
- optimize: false,
360
+ optimize: !watch,
252
361
  instrumentCode: undefined
253
362
  }
254
363
  }
255
- ],
364
+ ]
256
365
  },
257
- {
258
- test: /\.[cm]?jsx?$/,
259
- enforce: "pre",
260
- loader: "source-map-loader",
261
- options: {
262
- filterSourceMappingUrl: (_mapUri: string, resourcePath: string) => {
263
- return !resourcePath.includes("node_modules") || (/@simplysm[\\/]sd/).test(resourcePath);
366
+ ...watch ? [
367
+ {
368
+ test: /\.[cm]?jsx?$/,
369
+ enforce: "pre" as const,
370
+ loader: "source-map-loader",
371
+ options: {
372
+ filterSourceMappingUrl: (mapUri: string, resourcePath: string) => {
373
+ return !resourcePath.includes("node_modules") || (/@simplysm[\\/]sd/).test(resourcePath);
374
+ }
264
375
  }
265
376
  }
266
- },
377
+ ] : [],
267
378
  {
268
379
  test: /\.[cm]?tsx?$/,
269
380
  loader: "@ngtools/webpack",
270
- exclude: [/[/\\](?:css-loader|mini-css-extract-plugin|webpack-dev-server|webpack)[/\\]/],
381
+ exclude: [/[/\\](?:css-loader|mini-css-extract-plugin|webpack-dev-server|webpack)[/\\]/]
271
382
  },
272
383
  {
273
384
  test: /\.css$/i,
@@ -285,22 +396,23 @@ export class SdCliClientBuilder extends EventEmitter {
285
396
  },
286
397
  {
287
398
  loader: "css-loader",
288
- options: { url: false, sourceMap: true }
399
+ options: { url: false, sourceMap: watch }
289
400
  }
290
401
  ],
291
- include: path.resolve(this._rootPath, "src/styles.scss"),
402
+ include: [stylesFilePath],
292
403
  resourceQuery: { not: [/\?ngResource/] }
293
404
  },
294
405
  {
295
- type: "asset/source"
406
+ type: "asset/source",
407
+ resourceQuery: /\?ngResource/
296
408
  }
297
409
  ]
298
410
  },
299
411
  {
300
412
  use: [
301
413
  {
302
- loader: "resource-url-loader",
303
- options: { sourceMap: true }
414
+ loader: "resolve-url-loader",
415
+ options: { sourceMap: watch }
304
416
  },
305
417
  {
306
418
  loader: "sass-loader",
@@ -313,7 +425,7 @@ export class SdCliClientBuilder extends EventEmitter {
313
425
  includePaths: [],
314
426
  outputStyle: "expanded",
315
427
  quietDeps: true,
316
- verbose: undefined
428
+ verbose: watch ? undefined : false
317
429
  }
318
430
  }
319
431
  }
@@ -321,99 +433,14 @@ export class SdCliClientBuilder extends EventEmitter {
321
433
  }
322
434
  ]
323
435
  },
324
- {
325
- loader: HmrLoader,
326
- include: [path.resolve(this._rootPath, "src/main.ts")]
327
- }
328
- ]
329
- },
330
- mode: "development",
331
- devtool: false,
332
- target: ["web", "es2015"],
333
- profile: false,
334
- resolve: {
335
- roots: [this._rootPath],
336
- extensions: [".ts", ".tsx", ".mjs", ".js"],
337
- symlinks: true,
338
- modules: [this._workspaceRootPath, "node_modules"],
339
- mainFields: ["es2015", "browser", "module", "main"],
340
- conditionNames: ["es2015", "..."]
341
- },
342
- resolveLoader: {
343
- symlinks: true
344
- },
345
- context: this._workspaceRootPath,
346
- entry: {
347
- main: [
348
- `webpack-hot-middleware/client?path=${publicPath}__webpack_hmr&timeout=20000&reload=true&overlay=true`,
349
- path.resolve(this._rootPath, "src/main.ts")
350
- ],
351
- polyfills: [path.resolve(this._rootPath, "src/polyfills.ts")],
352
- styles: [path.resolve(this._rootPath, "src/styles.scss")]
353
- },
354
- output: {
355
- uniqueName: pkgKey,
356
- hashFunction: "xxhash64",
357
- clean: true,
358
- path: distPath,
359
- publicPath,
360
- filename: "[name].js",
361
- chunkFilename: "[name].js",
362
- libraryTarget: undefined,
363
- crossOriginLoading: false,
364
- trustedTypes: "angular#bundler",
365
- scriptType: "module",
366
- },
367
- watch: false,
368
- watchOptions: { poll: undefined, ignored: undefined },
369
- performance: { hints: false },
370
- ignoreWarnings: [
371
- /Failed to parse source map from/,
372
- /Add postcss as project dependency/,
373
- /"@charset" must be the first rule in the file/,
374
- ],
375
- experiments: { backCompat: false, syncWebAssembly: true, asyncWebAssembly: true },
376
- infrastructureLogging: { level: "error" },
377
- stats: "errors-warnings",
378
- cache: {
379
- type: "filesystem",
380
- profile: undefined,
381
- cacheDirectory: path.resolve(cachePath, "angular-webpack"),
382
- maxMemoryGenerations: 1,
383
- name: createHash("sha1").update(pkgVersion).digest("hex")
384
- },
385
- optimization: {
386
- minimizer: [],
387
- moduleIds: "deterministic",
388
- chunkIds: "named",
389
- emitOnErrors: false,
390
- runtimeChunk: "single",
391
- splitChunks: {
392
- maxAsyncRequests: Infinity,
393
- cacheGroups: {
394
- default: {
395
- chunks: "async",
396
- minChunks: 2,
397
- priority: 10
398
- },
399
- common: {
400
- name: "common",
401
- chunks: "async",
402
- minChunks: 2,
403
- enforce: true,
404
- priority: 5
405
- },
406
- vendors: false,
407
- defaultVendors: {
408
- name: "vendor",
409
- chunks: (chunk) => chunk.name === "main",
410
- enforce: true,
411
- test: /[\\/]node_modules[\\/]/
436
+ ...watch ? [
437
+ {
438
+ loader: HmrLoader,
439
+ include: [mainFilePath]
412
440
  }
413
- }
414
- }
415
- },
416
- node: false
441
+ ] : []
442
+ ]
443
+ }
417
444
  };
418
445
  }
419
446
 
@@ -25,9 +25,9 @@ export class SdCliJsLibBuilder extends EventEmitter {
25
25
 
26
26
  const relatedPaths = await this.getRelatedPathsAsync();
27
27
  const watcher = SdFsWatcher.watch(relatedPaths);
28
- watcher.onChange(async (changeInfos) => {
28
+ watcher.onChange({}, async (changeInfos) => {
29
29
  const changeFilePaths = changeInfos.filter((item) => ["add", "change", "unlink"].includes(item.event)).map((item) => item.path);
30
- if(changeFilePaths.length === 0) return;
30
+ if (changeFilePaths.length === 0) return;
31
31
 
32
32
  this._logger.debug("파일 변경 감지", changeInfos);
33
33
  this.emit("change");