@infomaximum/package-cli 1.6.0 → 1.7.0

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/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [1.7.0](https://github.com/Infomaximum/package-cli/compare/v1.6.1...v1.7.0) (2023-12-04)
6
+
7
+
8
+ ### Features
9
+
10
+ * удаление лишних файлов после сборки пакета ([db79fdd](https://github.com/Infomaximum/package-cli/commit/db79fdd1e15f94961b383ca2295a3eddbd32516a))
11
+
12
+ ### [1.6.1](https://github.com/Infomaximum/package-cli/compare/v1.6.0...v1.6.1) (2023-12-04)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * не работал HMR при разработке на удаленном стенде ([f2339af](https://github.com/Infomaximum/package-cli/commit/f2339afd5d1285d362ea85818611814e7d49c44c))
18
+
5
19
  ## [1.6.0](https://github.com/Infomaximum/package-cli/compare/v1.5.1...v1.6.0) (2023-12-01)
6
20
 
7
21
 
package/README.md CHANGED
@@ -6,25 +6,35 @@ Package-cli - предоставляет разработчикам набор
6
6
  <img alt="npm" src="https://img.shields.io/npm/v/@infomaximum/package-cli?style=for-the-badge">
7
7
  </a>
8
8
 
9
- ## Установка
9
+ ## Инициализация проекта
10
10
 
11
- ```bash
12
- yarn add -D @infomaximum/package-cli
13
- ```
11
+ Для создания нового пакета с виджетом необходимо выполнить следующую команду:
14
12
 
15
- ## Примеры использования
13
+ `npx @infomaximum/package-cli widget init my_widget`
16
14
 
17
- Сборка пакета с виджетом:
15
+ После выполнения данной команды будет создан шаблонный проект **my_widget** и инициализирован git репозиторий.
18
16
 
19
- ```bash
20
- yarn im-package-cli widget build --entry ./src/index.tsx
21
- ```
17
+ ## Разработка виджета
22
18
 
23
- Создание нового пакета с виджетом:
19
+ Для разработки виджета нужно выполнить команду:
24
20
 
25
- ```bash
26
- npx @infomaximum/package-cli widget init project_name
27
- ```
21
+ `yarn build:dev`
22
+
23
+ Данная команда выполняет сборку пакета для разработки. Далее, пакет (собранный архив из папки build) необходимо загрузить в систему. Для этого добавляем пакет в маркетплейс либо в пространство, а так же добавляем разрабатываемый виджет на холст (дашбординг).
24
+
25
+ Затем необходимо запустить сервер разработки следующей командой:
26
+
27
+ `yarn start`
28
+
29
+ В результате будет запущен сервер отслеживающий изменения проекта и выполняющий горячую перезагрузку разрабатываемого компонента.
30
+
31
+ ## Сборка пакета
32
+
33
+ Для того чтобы пользователи имели возможность использовать разработанный вами виджет, необходимо выполнить сборку пакета, для этого выполняем команду:
34
+
35
+ `yarn build`
36
+
37
+ Полученный в результате выполнения данной команды пакет можно загрузить в маркетплейс.
28
38
 
29
39
  ## Вывод всех доступных команд
30
40
 
@@ -1,19 +1,21 @@
1
1
  import ZipPlugin from "zip-webpack-plugin";
2
+ import RemovePlugin from "remove-files-webpack-plugin";
2
3
  import CopyWebpackPlugin from "copy-webpack-plugin";
3
4
  import path from "path";
4
5
  import { JsonModifyWebpackPlugin } from "@infomaximum/json-modify-webpack-plugin";
5
6
  import { systemRequire } from "../../utils.js";
6
- import { BUILD_ARCHIVE_EXT, BUILD_WIDGET_CONFIG_NAME, WIDGET_ARCHIVE_NAME, } from "../../const.js";
7
+ import { BUILD_ARCHIVE_EXT, BUILD_WIDGET_CONFIG_NAME, MANIFEST_REG_EXP, WIDGET_ARCHIVE_FULL_NAME, } from "../../const.js";
7
8
  const packageFilename = "main.js";
8
9
  export const getPackageConfig = (mode, PATHS) => {
9
10
  const widgetVersion = systemRequire(PATHS.appPackageJson).version;
10
11
  const manifestPackageName = systemRequire(PATHS.packageManifest).name;
12
+ const widgetPackageName = `${manifestPackageName}_${widgetVersion}`;
11
13
  return {
12
14
  mode,
13
15
  name: "package",
14
16
  entry: [
15
17
  PATHS.packageManifest,
16
- path.resolve(PATHS.appBuild, `${WIDGET_ARCHIVE_NAME}.${BUILD_ARCHIVE_EXT}`),
18
+ path.resolve(PATHS.appBuild, WIDGET_ARCHIVE_FULL_NAME),
17
19
  ],
18
20
  output: {
19
21
  path: PATHS.appBuild,
@@ -23,7 +25,7 @@ export const getPackageConfig = (mode, PATHS) => {
23
25
  module: {
24
26
  rules: [
25
27
  {
26
- test: /manifest.json$/i,
28
+ test: MANIFEST_REG_EXP,
27
29
  type: "asset/resource",
28
30
  generator: {
29
31
  filename: "manifest[ext]",
@@ -42,15 +44,28 @@ export const getPackageConfig = (mode, PATHS) => {
42
44
  new CopyWebpackPlugin({
43
45
  patterns: [{ from: PATHS.packagePath }],
44
46
  }),
47
+ new RemovePlugin({
48
+ after: {
49
+ root: PATHS.appBuild,
50
+ test: [
51
+ {
52
+ folder: ".",
53
+ method: () => true,
54
+ recursive: true,
55
+ },
56
+ ],
57
+ exclude: [`${widgetPackageName}.${BUILD_ARCHIVE_EXT}`],
58
+ },
59
+ }),
45
60
  new ZipPlugin({
46
- filename: `${manifestPackageName}_${widgetVersion}`,
61
+ filename: widgetPackageName,
47
62
  extension: BUILD_ARCHIVE_EXT,
48
63
  exclude: [packageFilename],
49
64
  }),
50
65
  new JsonModifyWebpackPlugin({
51
66
  matchers: [
52
67
  {
53
- matcher: /^manifest.json$/,
68
+ matcher: MANIFEST_REG_EXP,
54
69
  action: (currentJsonContent) => {
55
70
  currentJsonContent.version = widgetVersion;
56
71
  return currentJsonContent;
@@ -2,7 +2,7 @@ import ForkTsCheckerWebpackPlugin from "fork-ts-checker-webpack-plugin";
2
2
  import { TsconfigPathsPlugin } from "tsconfig-paths-webpack-plugin";
3
3
  import webpack, {} from "webpack";
4
4
  import { systemRequire } from "../../utils.js";
5
- import { BUILD_WIDGET_CONFIG_NAME } from "../../const.js";
5
+ import { BUILD_WIDGET_CONFIG_NAME, MANIFEST_REG_EXP } from "../../const.js";
6
6
  const { ProgressPlugin } = webpack;
7
7
  const isProduction = (mode) => mode === "production";
8
8
  const isDevelopment = (mode) => mode === "development";
@@ -121,7 +121,7 @@ export const getCommonWidgetConfig = (mode, PATHS) => {
121
121
  type: "asset/inline",
122
122
  },
123
123
  {
124
- test: /manifest.json$/i,
124
+ test: MANIFEST_REG_EXP,
125
125
  type: "asset/resource",
126
126
  generator: {
127
127
  filename: "[name][ext]",
@@ -11,5 +11,9 @@ export const getDevServerConfig = ({ host, port }) => {
11
11
  devMiddleware: {
12
12
  writeToDisk: false,
13
13
  },
14
+ allowedHosts: "all",
15
+ client: {
16
+ logging: "error",
17
+ },
14
18
  };
15
19
  };
@@ -1,8 +1,9 @@
1
1
  import ZipPlugin from "zip-webpack-plugin";
2
- import { BUILD_ARCHIVE_EXT, WIDGET_ARCHIVE_NAME } from "../../../../const.js";
3
- export const getZipWidgetPlugin = () => {
2
+ import { BUILD_ARCHIVE_EXT, MANIFEST_JSON_FILE_NAME, WIDGET_ARCHIVE_NAME, } from "../../../../const.js";
3
+ export const getZipWidgetPlugin = (isOnlyManifest) => {
4
4
  return new ZipPlugin({
5
5
  filename: WIDGET_ARCHIVE_NAME,
6
6
  extension: BUILD_ARCHIVE_EXT,
7
+ include: isOnlyManifest ? [MANIFEST_JSON_FILE_NAME] : undefined,
7
8
  });
8
9
  };
package/dist/const.js CHANGED
@@ -3,5 +3,8 @@ export const CUSTOM_PACKAGE_CLI_LIB_NAME = "@infomaximum/package-cli";
3
3
  export const BUILD_WIDGET_CONFIG_NAME = "build-widget";
4
4
  export const WIDGET_ARCHIVE_NAME = "widget";
5
5
  export const BUILD_ARCHIVE_EXT = "zip";
6
+ export const WIDGET_ARCHIVE_FULL_NAME = `${WIDGET_ARCHIVE_NAME}.${BUILD_ARCHIVE_EXT}`;
6
7
  export const DEFAULT_HOST = "localhost";
7
8
  export const DEFAULT_PORT = "5555";
9
+ export const MANIFEST_JSON_FILE_NAME = "manifest.json";
10
+ export const MANIFEST_REG_EXP = new RegExp(`${MANIFEST_JSON_FILE_NAME}$`, "i");
package/dist/paths.js CHANGED
@@ -2,6 +2,7 @@ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { systemRequire } from "./utils.js";
4
4
  import chalk from "chalk";
5
+ import { MANIFEST_JSON_FILE_NAME } from "./const.js";
5
6
  const appDirectory = fs.realpathSync(process.cwd());
6
7
  const _resolveApp = (cwd = appDirectory) => (relativePath) => path.resolve(cwd, relativePath);
7
8
  const moduleFileExtensions = [
@@ -37,9 +38,9 @@ export const generatePaths = (args) => {
37
38
  return generateIndexPath(cwd, entryPath);
38
39
  },
39
40
  appPackageJson: resolveApp("package.json"),
40
- manifestJson: resolveApp("manifest.json"),
41
+ manifestJson: resolveApp(MANIFEST_JSON_FILE_NAME),
41
42
  packagePath,
42
- packageManifest: resolveApp(path.resolve(packagePath, "manifest.json")),
43
+ packageManifest: resolveApp(path.resolve(packagePath, MANIFEST_JSON_FILE_NAME)),
43
44
  appTsConfig: resolveApp("tsconfig.json"),
44
45
  appNodeModules: resolveApp("node_modules"),
45
46
  publicPath: "/",
@@ -11,22 +11,23 @@ import { getZipWidgetPlugin } from "../../configs/webpack/sections/plugins/zipWi
11
11
  export const runBuild = (args) => __awaiter(void 0, void 0, void 0, function* () {
12
12
  const mode = "production";
13
13
  const { entry, host, port } = args;
14
+ const isOnlyManifest = !!(host && port);
14
15
  const PATHS = generatePaths({
15
16
  entryPath: entry,
16
17
  });
17
- const pluginsSection = {
18
- plugins: [getZipWidgetPlugin()],
18
+ const sections = {
19
+ plugins: [getZipWidgetPlugin(isOnlyManifest)],
19
20
  };
20
- if (host && port) {
21
- pluginsSection.plugins.push(getModifyManifestWidgetPlugin({
21
+ if (isOnlyManifest) {
22
+ sections.plugins.push(getModifyManifestWidgetPlugin({
22
23
  host,
23
24
  port,
24
25
  }));
25
- pluginsSection.entry = PATHS.manifestJson;
26
+ sections.entry = PATHS.manifestJson;
26
27
  }
27
28
  const configSections = [
28
29
  getCommonWidgetConfig(mode, PATHS),
29
- pluginsSection,
30
+ sections,
30
31
  getMinimizer(),
31
32
  ];
32
33
  const widgetConfig = merge(configSections);
@@ -9,7 +9,7 @@ import { WIDGET_INDEX_TEMPLATE } from "../../../templates/widget/src/widgetIndex
9
9
  import { APP_D_TS_TEMPLATE } from "../../../templates/widget/src/widgetAppDTs.js";
10
10
  import { WIDGET_INDEX_CSS_TEMPLATE } from "../../../templates/widget/src/widgetIndexCSS.js";
11
11
  import { WIDGET_PACKAGE_JSON_TEMPLATE } from "../../../templates/widget/widgetPackageJson.js";
12
- import { CUSTOM_PACKAGE_CLI_LIB_NAME, CUSTOM_WIDGET_LIB_NAME, } from "../../../const.js";
12
+ import { CUSTOM_PACKAGE_CLI_LIB_NAME, CUSTOM_WIDGET_LIB_NAME, MANIFEST_JSON_FILE_NAME, } from "../../../const.js";
13
13
  const addIconActionName = "addIcon";
14
14
  const addInitActions = (basePath, plop) => {
15
15
  plop.setActionType(addIconActionName, function (answers, config, plop) {
@@ -31,7 +31,7 @@ const actions = ({ customWidgetVersion, packageCliVersion }) => {
31
31
  return [
32
32
  {
33
33
  type: "add",
34
- path: "package/manifest.json",
34
+ path: `package/${MANIFEST_JSON_FILE_NAME}`,
35
35
  template: PACKAGE_MANIFEST_TEMPLATE,
36
36
  data: {
37
37
  packageIconName,
@@ -45,7 +45,7 @@ const actions = ({ customWidgetVersion, packageCliVersion }) => {
45
45
  },
46
46
  {
47
47
  type: "add",
48
- path: "manifest.json",
48
+ path: MANIFEST_JSON_FILE_NAME,
49
49
  template: WIDGET_MANIFEST_TEMPLATE,
50
50
  },
51
51
  {
@@ -1,3 +1,4 @@
1
+ import { MANIFEST_JSON_FILE_NAME } from "../../../const.js";
1
2
  import { capitalizeHelperName } from "../../../scripts/widget/init/helpers.js";
2
3
  export const WIDGET_INDEX_TEMPLATE = `\
3
4
  import React from "react";
@@ -9,7 +10,7 @@ import {
9
10
  type IBaseWidgetSettings,
10
11
  type ICustomWidgetProps,
11
12
  } from "@infomaximum/custom-widget";
12
- import manifest from "../manifest.json";
13
+ import manifest from "../${MANIFEST_JSON_FILE_NAME}";
13
14
 
14
15
  interface Settings extends IBaseWidgetSettings {}
15
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infomaximum/package-cli",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "exports": "./dist/index.js",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -26,9 +26,6 @@
26
26
  "@infomaximum/json-modify-webpack-plugin": "^1.0.1",
27
27
  "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
28
28
  "@svgr/webpack": "^8.1.0",
29
- "@types/node": "^20.9.0",
30
- "@types/semver": "^7.5.6",
31
- "@types/zip-webpack-plugin": "^3.0.6",
32
29
  "autoprefixer": "^10.4.16",
33
30
  "babel-loader": "^9.1.3",
34
31
  "babel-plugin-inline-json-import": "^0.3.2",
@@ -45,6 +42,7 @@
45
42
  "postcss-loader": "^7.3.3",
46
43
  "postcss-preset-env": "^9.3.0",
47
44
  "react-refresh": "^0.14.0",
45
+ "remove-files-webpack-plugin": "^1.5.0",
48
46
  "sass": "^1.69.5",
49
47
  "sass-loader": "^13.3.2",
50
48
  "semver": "^7.5.4",
@@ -58,6 +56,10 @@
58
56
  "zip-webpack-plugin": "^4.0.1"
59
57
  },
60
58
  "devDependencies": {
59
+ "@types/node": "^20.9.0",
60
+ "@types/webpack": "^5.28.5",
61
+ "@types/semver": "^7.5.6",
62
+ "@types/zip-webpack-plugin": "^3.0.6",
61
63
  "prettier": "^3.1.0",
62
64
  "rimraf": "^5.0.5",
63
65
  "typescript": "~5.3.2"
@@ -65,7 +67,8 @@
65
67
  "resolutions": {
66
68
  "wrap-ansi": "7.0.0",
67
69
  "string-width": "4.1.0",
68
- "strip-ansi": "6.0.0"
70
+ "strip-ansi": "6.0.0",
71
+ "@types/webpack": "^5.28.5"
69
72
  },
70
73
  "engines": {
71
74
  "node": ">=16"