@tuya-sat/micro-script 3.0.2 → 3.0.3

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.
@@ -7,10 +7,10 @@ declare const _default: {
7
7
  publicDir: string;
8
8
  spaHtml: string;
9
9
  manifest: string;
10
- saasCache: string;
11
10
  vueTsEntryFile: string;
12
11
  vueJsEntryFile: string;
13
12
  ReactTsEntryFile: string;
14
13
  ReactJsEntryFile: string;
14
+ node_modules: string;
15
15
  };
16
16
  export default _default;
@@ -14,9 +14,9 @@ exports.default = {
14
14
  publicDir: path_1.default.resolve(cwd, "public/"),
15
15
  spaHtml: path_1.default.resolve(cwd, "public/index.html"),
16
16
  manifest: path_1.default.resolve(cwd, "manifest.json"),
17
- saasCache: path_1.default.resolve(cwd, ".saas-cache.json"),
18
17
  vueTsEntryFile: path_1.default.resolve(cwd, "src/index.ts"),
19
18
  vueJsEntryFile: path_1.default.resolve(cwd, "src/index.js"),
20
19
  ReactTsEntryFile: path_1.default.resolve(cwd, "src/index.tsx"),
21
20
  ReactJsEntryFile: path_1.default.resolve(cwd, "src/index.jsx"),
21
+ node_modules: path_1.default.resolve(cwd, "node_modules")
22
22
  };
@@ -1,5 +1,9 @@
1
- import { Configuration } from "webpack";
1
+ import { Configuration } from 'webpack';
2
+ import { ThemeCat } from '@tuya-sat/micro-dev-loader/dist/less/utils/index';
3
+ declare type ThemeEnv = ThemeCat | undefined;
4
+ export declare const validateMicroTheme: () => ThemeEnv;
2
5
  export default function getCommonConfig({ isDev, isBuild, }: {
3
6
  isDev: boolean;
4
7
  isBuild: boolean;
5
8
  }): Configuration;
9
+ export {};
@@ -12,7 +12,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- const path_1 = __importDefault(require("path"));
15
+ exports.validateMicroTheme = void 0;
16
+ const webpack_merge_1 = require("webpack-merge");
16
17
  //@ts-ignore
17
18
  const copy_webpack_plugin_1 = __importDefault(require("copy-webpack-plugin"));
18
19
  //@ts-ignore
@@ -20,34 +21,44 @@ const mini_css_extract_plugin_1 = __importDefault(require("mini-css-extract-plug
20
21
  const html_webpack_plugin_1 = __importDefault(require("html-webpack-plugin"));
21
22
  const css_minimizer_webpack_plugin_1 = __importDefault(require("css-minimizer-webpack-plugin"));
22
23
  const micro_dev_loader_1 = require("@tuya-sat/micro-dev-loader");
24
+ const path_1 = __importDefault(require("path"));
23
25
  const index_1 = require("@tuya-sat/micro-dev-loader/dist/less/utils/index");
24
- const micro_utils_1 = require("@tuya-sat/micro-utils");
25
26
  const paths_1 = __importDefault(require("./paths"));
26
- const theme_1 = require("../utils/theme");
27
- const DYNAMIC_CHUNK_PREFIX = "micro_app_lazy";
27
+ const utils_1 = require("../utils");
28
28
  const toArray = (value) => {
29
29
  return Array.isArray(value) ? value : [value];
30
30
  };
31
+ const validateMicroTheme = () => {
32
+ const microTheme = process.env.MICRO_THEME;
33
+ if (microTheme && ![index_1.DARK_THEME, index_1.LIGHT_THEME].includes(microTheme)) {
34
+ console.error(`请设置正确的MICRO_THEME环境变量,当前值为${microTheme},请修改为${index_1.LIGHT_THEME}或${index_1.DARK_THEME}`);
35
+ return process.exit(1);
36
+ }
37
+ return microTheme;
38
+ };
39
+ exports.validateMicroTheme = validateMicroTheme;
31
40
  function getCommonConfig({ isDev, isBuild, }) {
32
41
  const { name: packageName } = require(paths_1.default.appPkg);
33
- const { annotations } = (0, micro_utils_1.parseManifest)();
34
- const enableThemeCompile = annotations["sdf.feat:colorTheme"];
42
+ const devMicroTheme = (0, exports.validateMicroTheme)();
43
+ const enableThemeCompile = isDev
44
+ ? !!devMicroTheme
45
+ : (0, utils_1.getAnnotations)()['sdf.feat:colorTheme'];
35
46
  //获取style处理的loader
36
47
  const getStyleLoaders = (extraLoader = []) => {
37
48
  extraLoader = toArray(extraLoader);
38
49
  const loadersBeforeCssLoader = [
39
- isDev && require("@tuya-sat/micro-dev-loader").filterCssVariableLoader,
40
- require.resolve("postcss-loader"),
50
+ isDev && require('@tuya-sat/micro-dev-loader').filterCssVariableLoader,
51
+ require.resolve('postcss-loader'),
41
52
  ...extraLoader,
42
53
  ].filter(Boolean);
43
54
  const loaders = [
44
- isBuild ? mini_css_extract_plugin_1.default.loader : require.resolve("style-loader"),
55
+ isBuild ? mini_css_extract_plugin_1.default.loader : require.resolve('style-loader'),
45
56
  {
46
- loader: require.resolve("css-loader"),
57
+ loader: require.resolve('css-loader'),
47
58
  options: {
48
59
  modules: {
49
60
  auto: true,
50
- localIdentName: isDev ? "[path][name]__[local]" : "[hash:base64]",
61
+ localIdentName: isDev ? '[path][name]__[local]' : '[hash:base64]',
51
62
  },
52
63
  importLoaders: loadersBeforeCssLoader.length,
53
64
  },
@@ -56,104 +67,159 @@ function getCommonConfig({ isDev, isBuild, }) {
56
67
  ].filter(Boolean);
57
68
  return loaders;
58
69
  };
59
- return {
60
- mode: isBuild ? "production" : "development",
61
- output: {
62
- filename: isBuild
63
- ? "static/js/[name].[contenthash:8].js"
64
- : "static/js/[name].bundle.js",
65
- chunkFilename: isBuild
66
- ? `static/js/${DYNAMIC_CHUNK_PREFIX}-[name].[contenthash:8].chunk.js`
67
- : "static/js/[name].chunk.js",
68
- path: paths_1.default.dist,
69
- clean: true,
70
- library: {
71
- name: packageName,
72
- type: "umd",
73
- },
74
- },
75
- module: {
76
- rules: [
77
- {
78
- test: /\.css$/,
79
- use: getStyleLoaders(),
70
+ const { multiApps, debuggerConfig: { isMainApp } } = require(paths_1.default.microConfig);
71
+ const multiAppsWebpackConfig = {
72
+ plugins: [],
73
+ entry: {},
74
+ };
75
+ function getWebpackConfig(htmlplugins) {
76
+ const baseConfig = {
77
+ mode: isBuild ? 'production' : 'development',
78
+ output: {
79
+ filename: isBuild
80
+ ? 'static/js/[name].[contenthash:8].js'
81
+ : 'static/js/[name].bundle.js',
82
+ chunkFilename: isBuild
83
+ ? 'static/js/[name].[contenthash:8].chunk.js'
84
+ : 'static/js/[name].chunk.js',
85
+ path: paths_1.default.dist,
86
+ clean: true,
87
+ library: {
88
+ name: packageName,
89
+ type: 'umd',
80
90
  },
81
- {
82
- test: /\.less$/,
83
- use: getStyleLoaders([
84
- {
85
- loader: require.resolve("less-loader"),
86
- options: {
87
- lessOptions: Object.assign(Object.assign({}, (enableThemeCompile
88
- ? isDev
89
- ? (0, index_1.getLessOptions)((0, theme_1.getBaseTheme)())
90
- : (0, index_1.getLessOptions)(index_1.LIGHT_THEME)
91
- : {})), { javascriptEnabled: true }),
91
+ },
92
+ module: {
93
+ rules: [
94
+ {
95
+ test: /\.css$/,
96
+ use: getStyleLoaders(),
97
+ },
98
+ {
99
+ test: /\.less$/,
100
+ use: getStyleLoaders([
101
+ {
102
+ loader: require.resolve('less-loader'),
103
+ options: {
104
+ lessOptions: Object.assign(Object.assign({}, (isDev
105
+ ? enableThemeCompile
106
+ ? (0, index_1.getLessOptions)(devMicroTheme)
107
+ : {}
108
+ : (0, utils_1.getAnnotations)()['sdf.feat:colorTheme']
109
+ ? (0, index_1.getLessOptions)(index_1.LIGHT_THEME)
110
+ : {})), { javascriptEnabled: true }),
111
+ },
112
+ },
113
+ enableThemeCompile &&
114
+ require('@tuya-sat/micro-dev-loader').changeAntdGlobalImport,
115
+ enableThemeCompile &&
116
+ require('@tuya-sat/micro-dev-loader')
117
+ .changeTuyaSatComponentImport,
118
+ ].filter(Boolean)),
119
+ },
120
+ {
121
+ test: /\.(scss|sass)$/,
122
+ use: getStyleLoaders(require.resolve('sass-loader')),
123
+ },
124
+ {
125
+ test: /\.(bmp|png|svg|jpg|jpeg|gif)$/i,
126
+ type: 'asset',
127
+ parser: {
128
+ dataUrlCondition: {
129
+ maxSize: 10 * 1024,
92
130
  },
93
131
  },
94
- enableThemeCompile &&
95
- require("@tuya-sat/micro-dev-loader").changeAntdGlobalImport,
96
- enableThemeCompile &&
97
- require("@tuya-sat/micro-dev-loader")
98
- .changeTuyaSatComponentImport,
99
- ].filter(Boolean)),
100
- },
101
- {
102
- test: /\.(scss|sass)$/,
103
- use: getStyleLoaders(require.resolve("sass-loader")),
104
- },
105
- {
106
- test: /\.(bmp|png|svg|jpg|jpeg|gif)$/i,
107
- type: "asset",
108
- parser: {
109
- dataUrlCondition: {
110
- maxSize: 10 * 1024,
132
+ generator: {
133
+ filename: 'static/img/[hash][ext][query]',
111
134
  },
112
135
  },
113
- generator: {
114
- filename: "static/img/[hash][ext][query]",
115
- },
116
- },
117
- ].filter(Boolean),
118
- },
119
- optimization: {
120
- splitChunks: {
121
- cacheGroups: Object.assign({}, (enableThemeCompile
122
- ? {
123
- vendorCss: {
124
- test: /([\\/]node_modules[\\/][\s\S]+(\.less|\.css)$)|([\\/]src[\\/]styles[\\/]global\.less)/,
125
- name: "light",
126
- chunks: "all",
127
- minSize: 0,
136
+ ].filter(Boolean),
137
+ },
138
+ optimization: {
139
+ runtimeChunk: 'single',
140
+ splitChunks: {
141
+ cacheGroups: Object.assign(Object.assign({}, (enableThemeCompile
142
+ ? {
143
+ vendorCss: {
144
+ test: /([\\/]node_modules[\\/][\s\S]+(\.less|\.css)$)|([\\/]src[\\/]styles[\\/]global\.less)/,
145
+ name: 'light',
146
+ chunks: 'all',
147
+ priority: 2,
148
+ },
149
+ }
150
+ : {})), { vendor: {
151
+ test: /[\\/]node_modules[\\/]/,
152
+ name: 'vendors-others',
153
+ chunks: 'all',
154
+ priority: 0,
155
+ }, main: {
156
+ test: /[\\/]node_modules[\\/](@tuya-sat\/sdf-main-sdk)[\\/]/,
157
+ name: 'main-related',
158
+ chunks: 'all',
159
+ priority: 1,
160
+ }, antd: {
161
+ test: /[\\/]node_modules[\\/](antd|@tuya-sat\/galaxy)[\\/]/,
162
+ name: 'antd-related',
163
+ chunks: 'all',
128
164
  priority: 2,
129
- },
130
- }
131
- : {})),
165
+ }, react: {
166
+ test: /[\\/]node_modules[\\/](react|react-dom|react-router-dom)[\\/]/,
167
+ name: 'react-related',
168
+ chunks: 'all',
169
+ priority: 3,
170
+ } }),
171
+ },
172
+ minimize: isBuild,
173
+ minimizer: ['...', new css_minimizer_webpack_plugin_1.default()],
132
174
  },
133
- minimizer: ["...", new css_minimizer_webpack_plugin_1.default()],
134
- },
135
- plugins: [
136
- new html_webpack_plugin_1.default({
175
+ plugins: [
176
+ new html_webpack_plugin_1.default({
177
+ inject: true,
178
+ template: paths_1.default.spaHtml,
179
+ }),
180
+ ...htmlplugins,
181
+ new copy_webpack_plugin_1.default({
182
+ patterns: [
183
+ {
184
+ from: paths_1.default.publicDir,
185
+ filter: (resourcePath) => __awaiter(this, void 0, void 0, function* () { return resourcePath !== paths_1.default.spaHtml; }),
186
+ noErrorOnMissing: true,
187
+ },
188
+ isMainApp && {
189
+ from: `${paths_1.default.node_modules}/@tuya-sat/sdf-main-sdk/dist/**/*.png`,
190
+ to() {
191
+ return "static/img/[name][ext]";
192
+ },
193
+ },
194
+ ].filter((value) => Boolean(value)),
195
+ }),
196
+ isBuild &&
197
+ new mini_css_extract_plugin_1.default({
198
+ filename: 'static/css/[name].[contenthash:8].css',
199
+ chunkFilename: 'static/css/[name].[contenthash:8].chunk.css',
200
+ }),
201
+ isBuild && enableThemeCompile && new micro_dev_loader_1.ThemePlugin(),
202
+ ].filter((value) => Boolean(value)),
203
+ };
204
+ return baseConfig;
205
+ }
206
+ if (multiApps && multiApps.length > 0) {
207
+ multiApps.forEach((app) => {
208
+ multiAppsWebpackConfig.entry[app.name] = `${path_1.default.join(process.cwd(), app.dir)}/index.tsx`;
209
+ multiAppsWebpackConfig.plugins.push(new html_webpack_plugin_1.default({
137
210
  inject: true,
211
+ filename: app.htmlContentHash
212
+ ? `${app.name}-[contenthash].html`
213
+ : `${app.name}.html`,
138
214
  template: paths_1.default.spaHtml,
139
- }),
140
- new copy_webpack_plugin_1.default({
141
- patterns: [
142
- {
143
- from: paths_1.default.publicDir,
144
- // 使用path.resolve纠正resourcePath,因为这个resourcePath值在windows平台显示的是POSIX值;
145
- filter: (resourcePath) => __awaiter(this, void 0, void 0, function* () { return path_1.default.resolve(resourcePath) !== paths_1.default.spaHtml; }),
146
- noErrorOnMissing: true,
147
- },
148
- ],
149
- }),
150
- isBuild &&
151
- new mini_css_extract_plugin_1.default({
152
- filename: "static/css/[name].[contenthash:8].css",
153
- chunkFilename: `static/css/${DYNAMIC_CHUNK_PREFIX}-[name].[contenthash:8].chunk.css`,
154
- }),
155
- isBuild && enableThemeCompile && new micro_dev_loader_1.ThemePlugin(),
156
- ].filter((value) => Boolean(value)),
157
- };
215
+ chunks: [app.name],
216
+ }));
217
+ });
218
+ console.log('multiAppsWebpackConfig', multiAppsWebpackConfig);
219
+ return (0, webpack_merge_1.merge)(getWebpackConfig(multiAppsWebpackConfig.plugins), {
220
+ entry: multiAppsWebpackConfig.entry,
221
+ });
222
+ }
223
+ return getWebpackConfig([]);
158
224
  }
159
225
  exports.default = getCommonConfig;
@@ -1,4 +1,4 @@
1
- import { Configuration } from "webpack";
1
+ import { Configuration } from 'webpack';
2
2
  export interface BaseParams {
3
3
  isDev: boolean;
4
4
  isBuild: boolean;
@@ -7,14 +7,13 @@ const webpack_merge_1 = require("webpack-merge");
7
7
  const paths_1 = __importDefault(require("./paths"));
8
8
  const framework_1 = __importDefault(require("../framework"));
9
9
  const webpack_common_1 = __importDefault(require("./webpack.common"));
10
- const micro_utils_1 = require("@tuya-sat/micro-utils");
10
+ const utils_1 = require("../utils");
11
11
  exports.default = () => {
12
- const isBuild = process.env.NODE_ENV === "production";
13
- const isDev = process.env.NODE_ENV === "development";
14
- const { annotations: { ["sdf.cli:microFramework"]: currentFramework }, } = (0, micro_utils_1.parseManifest)();
12
+ const isBuild = process.env.NODE_ENV === 'production';
13
+ const isDev = process.env.NODE_ENV === 'development';
15
14
  //框架的webpack配置
16
15
  const frameworkConfig = (0, framework_1.default)({
17
- currentFramework,
16
+ currentFramework: (0, utils_1.getAnnotations)()['sdf.cli:microFramework'],
18
17
  isDev,
19
18
  isBuild,
20
19
  });
@@ -23,7 +22,7 @@ exports.default = () => {
23
22
  const baseConfig = (0, webpack_merge_1.merge)(frameworkConfig, commonConfig);
24
23
  //额外的webpack结合function
25
24
  const webpackCombineFunction = require(paths_1.default.microConfig).webpack;
26
- if (webpackCombineFunction && typeof webpackCombineFunction === "function") {
25
+ if (webpackCombineFunction && typeof webpackCombineFunction === 'function') {
27
26
  return webpackCombineFunction(baseConfig, { isDev, isBuild });
28
27
  }
29
28
  return baseConfig;
@@ -1,4 +1,4 @@
1
- import { FrameworkFunction } from "./index";
1
+ import { FrameworkFunction } from './index';
2
2
  declare const reactTsConfig: FrameworkFunction;
3
3
  declare const reactJsConfig: FrameworkFunction;
4
4
  export { reactTsConfig, reactJsConfig };
@@ -17,26 +17,26 @@ const reactConfig = ({ isDev, isBuild, currentFramework, isTs, }) => {
17
17
  include: paths_1.default.appSrc,
18
18
  use: [
19
19
  {
20
- loader: require.resolve("babel-loader"),
20
+ loader: require.resolve('babel-loader'),
21
21
  options: {
22
22
  presets: [
23
23
  [
24
- require.resolve("@babel/preset-env"),
24
+ require.resolve('@babel/preset-env'),
25
25
  {
26
- useBuiltIns: "entry",
26
+ useBuiltIns: 'entry',
27
27
  corejs: 3,
28
28
  },
29
29
  ],
30
30
  [
31
- require.resolve("@babel/preset-react"),
31
+ require.resolve('@babel/preset-react'),
32
32
  {
33
- runtime: "automatic",
33
+ runtime: 'automatic',
34
34
  },
35
35
  ],
36
- isTs && require.resolve("@babel/preset-typescript"),
36
+ isTs && require.resolve('@babel/preset-typescript'),
37
37
  ].filter(Boolean),
38
38
  plugins: [
39
- isDev && require.resolve("react-refresh/babel"),
39
+ isDev && require.resolve('react-refresh/babel'),
40
40
  ].filter(Boolean),
41
41
  },
42
42
  },
@@ -48,7 +48,7 @@ const reactConfig = ({ isDev, isBuild, currentFramework, isTs, }) => {
48
48
  exclude: paths_1.default.appSrc,
49
49
  use: [
50
50
  {
51
- loader: require.resolve("babel-loader"),
51
+ loader: require.resolve('babel-loader'),
52
52
  },
53
53
  ],
54
54
  },
@@ -64,18 +64,18 @@ const reactConfig = ({ isDev, isBuild, currentFramework, isTs, }) => {
64
64
  semantic: true,
65
65
  syntactic: true,
66
66
  },
67
- mode: "write-references",
67
+ mode: 'write-references',
68
68
  },
69
69
  }),
70
70
  ].filter((value) => Boolean(value)),
71
71
  };
72
72
  };
73
73
  const reactTsConfig = ({ isDev, isBuild, currentFramework, }) => (Object.assign({ entry: paths_1.default.ReactTsEntryFile, resolve: {
74
- extensions: [".tsx", ".ts", ".js"],
74
+ extensions: ['.tsx', '.ts', '.js'],
75
75
  plugins: [new tsconfig_paths_webpack_plugin_1.default()],
76
76
  } }, reactConfig({ isDev, isBuild, currentFramework, isTs: true })));
77
77
  exports.reactTsConfig = reactTsConfig;
78
78
  const reactJsConfig = ({ isDev, isBuild, currentFramework, }) => (Object.assign({ entry: paths_1.default.ReactJsEntryFile, resolve: {
79
- extensions: [".jsx", ".js"],
79
+ extensions: ['.jsx', '.js'],
80
80
  } }, reactConfig({ isDev, isBuild, currentFramework, isTs: false })));
81
81
  exports.reactJsConfig = reactJsConfig;
@@ -1,9 +1,9 @@
1
- import webpack, { Compiler } from "webpack";
2
- import { Configuration } from "webpack-dev-server";
1
+ import webpack, { Compiler } from 'webpack';
2
+ import { Configuration } from 'webpack-dev-server';
3
3
  export declare type CustomDevServer = (value: Configuration) => typeof value;
4
4
  export declare function createServerCompiler(): webpack.Compiler;
5
5
  export declare function runBundleServer({ port, compiler, internalDevConfig, }: {
6
6
  port: number;
7
7
  compiler: Compiler;
8
- internalDevConfig?: Pick<Configuration, "open" | "setupMiddlewares" | "allowedHosts">;
8
+ internalDevConfig?: Pick<Configuration, 'open' | 'setupMiddlewares' | 'allowedHosts'>;
9
9
  }): Promise<void>;
@@ -36,8 +36,8 @@ function createServerCompiler() {
36
36
  const config = Object.assign(Object.assign({}, (0, webpack_config_1.default)()), {
37
37
  //下面所有配置都是为了精简terminal输出
38
38
  infrastructureLogging: {
39
- level: "warn",
40
- }, stats: "errors-warnings" });
39
+ level: 'warn',
40
+ }, stats: 'errors-warnings' });
41
41
  return (0, webpack_1.default)(config);
42
42
  }
43
43
  exports.createServerCompiler = createServerCompiler;
@@ -47,8 +47,8 @@ function runBundleServer({ port, compiler, internalDevConfig = {}, }) {
47
47
  const { devServer = (value) => value } = require(paths_1.default.microConfig);
48
48
  const { setupMiddlewares: startDevSetupMiddlewares } = internalDevConfig, restServerConfig = __rest(internalDevConfig, ["setupMiddlewares"]);
49
49
  const server = new webpack_dev_server_1.default(devServer(Object.assign({ hot: true, liveReload: false, port, headers: {
50
- "Access-Control-Allow-Origin": "*",
51
- "Access-Control-Allow-Headers": "*",
50
+ 'Access-Control-Allow-Origin': '*',
51
+ 'Access-Control-Allow-Headers': '*',
52
52
  }, historyApiFallback: true, setupMiddlewares(middleware, devServer) {
53
53
  //可能会有问题
54
54
  middleware.push(options_1.default);
@@ -56,21 +56,22 @@ function runBundleServer({ port, compiler, internalDevConfig = {}, }) {
56
56
  ? startDevSetupMiddlewares(middleware, devServer)
57
57
  : middleware;
58
58
  } }, restServerConfig)), compiler);
59
- compiler.hooks.watchRun.tap("MyPlugin", () => {
59
+ compiler.hooks.watchRun.tap('MyPlugin', () => {
60
60
  spinner.isSpinning && spinner.succeed();
61
- spinner.color = "yellow";
62
- spinner.text = "webpack compiling";
61
+ spinner.color = 'yellow';
62
+ spinner.text = 'webpack compiling';
63
63
  spinner.start();
64
64
  });
65
- compiler.hooks.done.tap("MyPlugin", ({ endTime, startTime }) => {
65
+ compiler.hooks.done.tap('MyPlugin', ({ endTime, startTime }) => {
66
66
  spinner.isSpinning && spinner.succeed();
67
67
  console.log(`compiled time ~${endTime - startTime}ms`);
68
68
  });
69
69
  //临时提示
70
- compiler.hooks.done.tap("once-tip", (0, onceFactory_1.onceFactory)(() => {
70
+ compiler.hooks.done.tap('once-tip', (0, onceFactory_1.onceFactory)(() => {
71
71
  console.log(chalk_1.default.yellow(`Tip: 如果HMR失效且保存文件时造成多次compile,请考虑调高aggregateTimeout参数(可以尝试100)`));
72
72
  }));
73
- server.start();
73
+ yield server.start();
74
+ console.log('本地应用服务已启动');
74
75
  });
75
76
  }
76
77
  exports.runBundleServer = runBundleServer;
@@ -1,4 +1,4 @@
1
- import { DebuggerConfig } from "./staticMain";
1
+ import { DebuggerConfig } from './staticMain';
2
2
  interface anyObject {
3
3
  [key: string]: any;
4
4
  }
@@ -13,55 +13,49 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.getFakeUser = void 0;
16
- const fs_extra_1 = __importDefault(require("fs-extra"));
17
16
  const axios_1 = __importDefault(require("axios"));
18
17
  const chalk_1 = __importDefault(require("chalk"));
19
- const paths_1 = __importDefault(require("../../config/paths"));
20
18
  function parse_SDF_CONFIG(html) {
21
19
  var _a;
22
20
  const REGEX = /(?<=window._SDF_CONFIG=).*?(?=;)/;
23
- return ((_a = REGEX.exec(html)) === null || _a === void 0 ? void 0 : _a[0]) || "";
21
+ return ((_a = REGEX.exec(html)) === null || _a === void 0 ? void 0 : _a[0]) || '';
24
22
  }
25
23
  function parse_SDF(html) {
26
24
  var _a;
27
25
  const REGEX = /(?<=window._SDF=).*?(?=;)/;
28
- return ((_a = REGEX.exec(html)) === null || _a === void 0 ? void 0 : _a[0]) || "";
26
+ return ((_a = REGEX.exec(html)) === null || _a === void 0 ? void 0 : _a[0]) || '';
29
27
  }
30
28
  function parse__MAIN_APP_PUBLIC_PATH(html) {
31
29
  var _a;
32
30
  const REGEX = /(?<=window.__MAIN_APP_PUBLIC_PATH=).*?(?=;)/;
33
- return ((_a = REGEX.exec(html)) === null || _a === void 0 ? void 0 : _a[0]) || "";
31
+ return ((_a = REGEX.exec(html)) === null || _a === void 0 ? void 0 : _a[0]) || '';
34
32
  }
35
33
  function getFakeSaas(config) {
36
34
  return __awaiter(this, void 0, void 0, function* () {
37
- if (!fs_extra_1.default.existsSync(paths_1.default.saasCache) && !config.target) {
38
- console.log(chalk_1.default.red("不存在缓存文件,且没有配置target"));
35
+ if (!config.target) {
36
+ console.log(chalk_1.default.red('没有配置target'));
39
37
  process.exit(1);
40
38
  }
41
- if (!fs_extra_1.default.existsSync(paths_1.default.saasCache)) {
42
- const { data } = yield axios_1.default.get(new URL("/login", config.target).href);
43
- const _SDF_CONFIG = parse_SDF_CONFIG(data);
44
- const _SDF = parse_SDF(data);
45
- const __MAIN_APP_PUBLIC_PATH = parse__MAIN_APP_PUBLIC_PATH(data);
46
- const saas = {
47
- _SDF_CONFIG: JSON.parse(_SDF_CONFIG),
48
- _SDF: JSON.parse(_SDF),
49
- __MAIN_APP_PUBLIC_PATH: JSON.parse(__MAIN_APP_PUBLIC_PATH),
50
- };
51
- fs_extra_1.default.writeJSONSync(paths_1.default.saasCache, saas);
52
- return saas;
53
- }
54
- return fs_extra_1.default.readJSONSync(paths_1.default.saasCache);
39
+ const { data } = yield axios_1.default.get(new URL('/login', config.target).href);
40
+ const _SDF_CONFIG = parse_SDF_CONFIG(data);
41
+ const _SDF = parse_SDF(data);
42
+ const __MAIN_APP_PUBLIC_PATH = parse__MAIN_APP_PUBLIC_PATH(data);
43
+ const saas = {
44
+ _SDF_CONFIG: JSON.parse(_SDF_CONFIG),
45
+ _SDF: JSON.parse(_SDF),
46
+ __MAIN_APP_PUBLIC_PATH: JSON.parse(__MAIN_APP_PUBLIC_PATH),
47
+ };
48
+ return saas;
55
49
  });
56
50
  }
57
51
  exports.default = getFakeSaas;
58
52
  function getFakeUser(config) {
59
53
  return {
60
- user_name: config.username || "admin@tuya.com",
54
+ user_name: config.username || 'admin@tuya.com',
61
55
  roles: [
62
56
  {
63
- role_code: "FAKE_ROLE_CODE",
64
- role_name: "FAKE_ROLE_NAME",
57
+ role_code: 'FAKE_ROLE_CODE',
58
+ role_name: 'FAKE_ROLE_NAME',
65
59
  },
66
60
  ],
67
61
  };
@@ -1,2 +1,2 @@
1
- import { Express } from "express";
2
- export default function mockSaasInfo(app: Express, microPort: number): string;
1
+ import { Express } from 'express';
2
+ export default function mockSaasInfo(app: Express, microPort: number): void;
@@ -1,4 +1,27 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
@@ -6,33 +29,78 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
29
  const micro_utils_1 = require("@tuya-sat/micro-utils");
7
30
  const uuid_1 = require("uuid");
8
31
  const paths_1 = __importDefault(require("../../config/paths"));
32
+ const uid_1 = require("uid");
33
+ const path = __importStar(require("path"));
34
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
35
  function mockSaasInfo(app, microPort) {
10
- const manifest = (0, micro_utils_1.parseManifest)();
11
- const entry_id = (0, uuid_1.v4)();
12
- const oem_micro_app_id = manifest.universalId;
13
- const baseUrl = `/apps/${oem_micro_app_id}`;
14
- app.get("/api/saas-info", (req, res) => {
15
- const lang = parseCookie(req.headers["cookie"], "main-i18next");
16
- const app = consturctApp(manifest, oem_micro_app_id, baseUrl, lang, microPort);
17
- const entryInfo = consturctEntry(manifest, oem_micro_app_id, entry_id, baseUrl, lang);
18
- const permission = consturctPermissions();
19
- res.send({
20
- code: null,
21
- errorMsg: null,
22
- msg: null,
23
- result: {
24
- apps: [app],
25
- entry_info: { entries: [entryInfo], entry_mode: "normal" },
26
- permissions: { [oem_micro_app_id]: permission },
27
- },
28
- success: true,
29
- });
36
+ const { multiApps, debuggerConfig: { isMainApp }, } = require(paths_1.default.microConfig);
37
+ const idsMap = new Map();
38
+ multiApps === null || multiApps === void 0 ? void 0 : multiApps.forEach((app) => {
39
+ idsMap.set(app.name, { entry_id: (0, uuid_1.v4)(), oem_micro_app_id: (0, uid_1.uid)(16) });
30
40
  });
31
- return baseUrl;
41
+ if (!isMainApp) {
42
+ app.get('/api/saas-info', (req, res) => {
43
+ const lang = parseCookie(req.headers['cookie'], 'main-i18next');
44
+ if (multiApps && multiApps.length > 0) {
45
+ const result = {
46
+ apps: [],
47
+ entry_info: { entries: [], entry_mode: 'normal' },
48
+ permissions: {},
49
+ saas_id_info_list: [],
50
+ };
51
+ multiApps.forEach((app) => {
52
+ const entry_id = idsMap.get(app.name).entry_id;
53
+ const manifest = fs_extra_1.default.readJSONSync(path.join(process.cwd(), `${app.dir}/manifest.json`), 'utf-8');
54
+ const oem_micro_app_id = idsMap.get(app.name).oem_micro_app_id;
55
+ const baseUrl = `/apps/${oem_micro_app_id}`;
56
+ result.saas_id_info_list.push({
57
+ oem_micro_app_id: oem_micro_app_id,
58
+ universal_id: '',
59
+ });
60
+ const micoApp = consturctApp(manifest, oem_micro_app_id, baseUrl, lang, microPort, app.name);
61
+ const entryInfo = consturctEntry(manifest, oem_micro_app_id, entry_id, baseUrl, lang, app.dir);
62
+ const permission = consturctPermissions();
63
+ result.apps.push(micoApp);
64
+ result.entry_info.entries.push(entryInfo);
65
+ result.permissions[oem_micro_app_id] = permission;
66
+ });
67
+ res.send({
68
+ code: null,
69
+ errorMsg: null,
70
+ msg: null,
71
+ result,
72
+ success: true,
73
+ });
74
+ }
75
+ else {
76
+ const manifest = (0, micro_utils_1.parseManifest)();
77
+ const entry_id = (0, uuid_1.v4)();
78
+ const oem_micro_app_id = manifest.universalId;
79
+ const baseUrl = `/apps/${oem_micro_app_id}`;
80
+ const app = consturctApp(manifest, oem_micro_app_id, baseUrl, lang, microPort);
81
+ const entryInfo = consturctEntry(manifest, oem_micro_app_id, entry_id, baseUrl, lang, '');
82
+ const permission = consturctPermissions();
83
+ res.send({
84
+ code: null,
85
+ errorMsg: null,
86
+ msg: null,
87
+ result: {
88
+ apps: [app],
89
+ entry_info: { entries: [entryInfo], entry_mode: 'normal' },
90
+ permissions: { [oem_micro_app_id]: permission },
91
+ saas_id_info_list: [
92
+ { oem_micro_app_id: oem_micro_app_id, universal_id: '' },
93
+ ],
94
+ },
95
+ success: true,
96
+ });
97
+ }
98
+ });
99
+ }
32
100
  }
33
101
  exports.default = mockSaasInfo;
34
- function consturctEntry(manifest, oem_micro_app_id, entry_id, baseUrl, lang) {
35
- const fakeMenu = (0, micro_utils_1.getFakeMenu)(manifest);
102
+ function consturctEntry(manifest, oem_micro_app_id, entry_id, baseUrl, lang, dir) {
103
+ const fakeMenu = (0, micro_utils_1.getFakeMenu)(manifest, dir);
36
104
  let stack = [fakeMenu];
37
105
  while (stack.length) {
38
106
  const menu = stack.shift();
@@ -49,17 +117,17 @@ function consturctEntry(manifest, oem_micro_app_id, entry_id, baseUrl, lang) {
49
117
  }
50
118
  return fakeMenu;
51
119
  }
52
- function consturctApp(manifest, oem_micro_app_id, baseUrl, lang, port) {
120
+ function consturctApp(manifest, oem_micro_app_id, baseUrl, lang, port, code) {
53
121
  const packageInfo = (0, micro_utils_1.getPackage)();
54
122
  return {
55
123
  active_rule: baseUrl,
56
- dependencies: [""],
124
+ dependencies: [''],
57
125
  ext_info: null,
58
- micro_app_code: `${packageInfo.name}`,
59
- micro_app_name: `${pickText((0, micro_utils_1.nameProcesser2)("name"), lang)}-dev`,
60
- micro_app_version: "0.0.0-x",
126
+ micro_app_code: code || `${packageInfo.name}`,
127
+ micro_app_name: code ? `${code}-dev` : `${packageInfo.name}-dev`,
128
+ micro_app_version: '0.0.0-x',
61
129
  oem_micro_app_id,
62
- resource: `http://localhost:${port}`,
130
+ resource: `http://localhost:${port}/${code || 'index'}.html`,
63
131
  schema: null,
64
132
  universal_id: manifest.universalId,
65
133
  isAuth: true,
@@ -71,15 +139,15 @@ function consturctPermissions() {
71
139
  return mockPermissions.map((code) => ({ permission_group: code }));
72
140
  }
73
141
  function pickText(texts, lang) {
74
- return lang === "en" ? texts[1] : texts[0];
142
+ return lang === 'en' ? texts[1] : texts[0];
75
143
  }
76
144
  function parseCookie(cookie, key) {
77
- const cookies = (cookie || "").split(";");
145
+ const cookies = (cookie || '').split(';');
78
146
  for (let cookieItem of cookies) {
79
- const [cookieKey, value] = cookieItem.split("=");
147
+ const [cookieKey, value] = cookieItem.split('=');
80
148
  if (cookieKey.trim() === key) {
81
149
  return value;
82
150
  }
83
151
  }
84
- return "";
152
+ return '';
85
153
  }
@@ -1,5 +1,5 @@
1
- import { Express } from "express";
2
- import type { Config } from "@tuya-sat/micro-dev-proxy";
1
+ import { Express } from 'express';
2
+ import type { Config } from '@tuya-sat/micro-dev-proxy';
3
3
  export interface DebuggerConfig extends Config {
4
4
  themeConfig?: {
5
5
  primaryColor: string;
@@ -20,4 +20,4 @@ export declare type CustomConfig = {
20
20
  };
21
21
  export default function staticMain(app: Express & {
22
22
  _isLogin?: Promise<void>;
23
- }, debuggerConfig: DebuggerConfig): void;
23
+ }, debuggerConfig: DebuggerConfig, microPort: number): void;
@@ -39,22 +39,25 @@ const cheerio_1 = __importDefault(require("cheerio"));
39
39
  const axios_1 = __importDefault(require("axios"));
40
40
  const fakeSaas_1 = __importStar(require("./fakeSaas"));
41
41
  const paths_1 = __importDefault(require("../../config/paths"));
42
- const theme_1 = require("../../utils/theme");
43
- const defaultBase = "https://static1.tuyacn.com/static/sdf-gw/v1.0.1.516/";
44
- function staticMain(app, debuggerConfig) {
42
+ const webpack_common_1 = require("../../config/webpack.common");
43
+ const defaultBase = 'https://static1.tuyacn.com/static/sdf-gw/v1.0.1.516/';
44
+ function staticMain(app, debuggerConfig, microPort) {
45
45
  app.get([
46
- "/",
47
- "/apps/:appId",
48
- "/login",
49
- "/apps/:appId/*",
50
- "/application",
51
- "/application/*",
46
+ '/',
47
+ '/apps/:appId',
48
+ '/login',
49
+ '/apps/:appId/*',
50
+ '/application',
51
+ '/application/*',
52
52
  ], (req, res) => __awaiter(this, void 0, void 0, function* () {
53
- if (app._isLogin) {
53
+ if (!debuggerConfig.isMainApp && app._isLogin) {
54
54
  yield app._isLogin;
55
55
  }
56
- const base = debuggerConfig.base || defaultBase;
57
- const { data } = yield axios_1.default.get(new URL("index.html", base).href);
56
+ let base = debuggerConfig.base || defaultBase;
57
+ if (debuggerConfig.isMainApp) {
58
+ base = `http://localhost:${microPort}`;
59
+ }
60
+ const { data } = yield axios_1.default.get(new URL('index.html', base).href);
58
61
  const $ = cheerio_1.default.load(data);
59
62
  modifySrcAttr($, base);
60
63
  yield insertScript($, debuggerConfig);
@@ -64,15 +67,15 @@ function staticMain(app, debuggerConfig) {
64
67
  exports.default = staticMain;
65
68
  function initalCustom_configs(saas) {
66
69
  const config = {
67
- config_group: "",
68
- config_key: "dynamic_theme",
69
- config_value: "",
70
- config_label: "",
71
- config_value_json: "{}",
72
- config_name_zh: "",
73
- config_name_en: "",
74
- platform: "",
75
- config_id: "",
70
+ config_group: '',
71
+ config_key: 'dynamic_theme',
72
+ config_value: '',
73
+ config_label: '',
74
+ config_value_json: '{}',
75
+ config_name_zh: '',
76
+ config_name_en: '',
77
+ platform: '',
78
+ config_id: '',
76
79
  };
77
80
  saas.custom_configs.push(config);
78
81
  return config;
@@ -82,7 +85,7 @@ function readThemeConfig() {
82
85
  return require(paths_1.default.microConfig).debuggerConfig.themeConfig;
83
86
  }
84
87
  function overrideNotification(value) {
85
- const isProxy = process.env.MICRO_PROXY === "true";
88
+ const isProxy = process.env.MICRO_PROXY === 'true';
86
89
  !isProxy && (value.message_switch = false);
87
90
  }
88
91
  function insertScript($, debuggerConfig) {
@@ -93,9 +96,9 @@ function insertScript($, debuggerConfig) {
93
96
  const { saas } = _SDF;
94
97
  (_a = saas.custom_configs) !== null && _a !== void 0 ? _a : (saas.custom_configs = []);
95
98
  let themeConfig = saas.custom_configs.find((item) => {
96
- return item.config_key === "dynamic_theme";
99
+ return item.config_key === 'dynamic_theme';
97
100
  }) || initalCustom_configs(saas);
98
- const theme = (0, theme_1.getBaseTheme)();
101
+ const theme = (0, webpack_common_1.validateMicroTheme)();
99
102
  themeConfig.config_value_json = JSON.stringify(Object.assign(Object.assign(Object.assign({}, JSON.parse(themeConfig.config_value_json)), (theme
100
103
  ? {
101
104
  supportedTheme: theme,
@@ -103,17 +106,17 @@ function insertScript($, debuggerConfig) {
103
106
  : {})), readThemeConfig()));
104
107
  overrideNotification(saas);
105
108
  // 本地开发态多语言剥离多语言平台,走本地多语言兜底逻辑
106
- _SDF.saas.saas_locales = {};
107
- $("head").append($("<script>").text(`window._SDF_CONFIG=${JSON.stringify(_SDF_CONFIG)};window._SDF=${JSON.stringify(_SDF)};window.__MAIN_APP_PUBLIC_PATH=${JSON.stringify(__MAIN_APP_PUBLIC_PATH)};
109
+ delete _SDF.saas.saas_locales;
110
+ $('head').append($('<script>').text(`window._SDF_CONFIG=${JSON.stringify(_SDF_CONFIG)};window._SDF=${JSON.stringify(_SDF)};window.__MAIN_APP_PUBLIC_PATH=${JSON.stringify(__MAIN_APP_PUBLIC_PATH)};
108
111
  localStorage.setItem('theme',${JSON.stringify(process.env.MICRO_THEME)});
109
112
  localStorage.setItem('isDebugger','true')
110
113
  `));
111
114
  });
112
115
  }
113
116
  function modifySrcAttr($, base) {
114
- const tags = ["img src", "link href", "script src"];
117
+ const tags = ['img src', 'link href', 'script src'];
115
118
  tags.forEach((p) => {
116
- const [tagName, attr] = p.split(" ");
119
+ const [tagName, attr] = p.split(' ');
117
120
  $(tagName).map(function () {
118
121
  const origin = $(this).attr(attr);
119
122
  if (/^(\/|http:|https:)/.test(origin))
@@ -23,19 +23,22 @@ const proxy_1 = __importDefault(require("../module/proxy"));
23
23
  const validate_1 = require("../utils/validate");
24
24
  function runMain({ port, microPort, }) {
25
25
  return __awaiter(this, void 0, void 0, function* () {
26
- const { debuggerConfig } = require(paths_1.default.microConfig);
26
+ const { debuggerConfig, mainServer } = require(paths_1.default.microConfig);
27
27
  (0, validate_1.validateDebuggerConfig)(debuggerConfig);
28
28
  const app = (0, express_1.default)();
29
- (0, staticMain_1.default)(app, debuggerConfig);
29
+ mainServer && mainServer.before && mainServer.before(app);
30
+ (0, staticMain_1.default)(app, debuggerConfig, microPort);
30
31
  (0, fakeSaasInfo_1.default)(app, microPort);
31
32
  (0, mock_1.default)(app);
32
33
  (0, proxy_1.default)(app);
34
+ mainServer && mainServer.after && mainServer.after(app);
33
35
  const { waiting, resolve } = (0, promiser_1.promiser)();
34
36
  app.listen(port, () => {
35
37
  (0, ora_1.default)(`main server in ${port} port`).succeed();
36
38
  resolve();
37
39
  });
38
40
  yield waiting;
41
+ console.log('代理服务已启动');
39
42
  });
40
43
  }
41
44
  exports.default = runMain;
@@ -1,8 +1,7 @@
1
- /// <reference types="qs" />
2
- /// <reference types="express" />
3
- declare const _default: {
1
+ import { ExpressRequestHandler } from 'webpack-dev-server';
2
+ declare const option: {
4
3
  name: string;
5
4
  path: string;
6
- middleware: import("express").RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
5
+ middleware: ExpressRequestHandler;
7
6
  };
8
- export default _default;
7
+ export default option;
@@ -1,15 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const middleware = (req, res, next) => {
4
- if (req.method === "OPTIONS") {
4
+ if (req.method === 'OPTIONS') {
5
5
  res.statusCode = 204;
6
- res.send("ok");
6
+ res.send('ok');
7
7
  return;
8
8
  }
9
9
  next();
10
10
  };
11
- exports.default = {
12
- name: "options-middleware",
13
- path: "*",
11
+ const option = {
12
+ name: 'options-middleware',
13
+ path: '*',
14
14
  middleware,
15
15
  };
16
+ exports.default = option;
@@ -30,16 +30,11 @@ const config = (0, webpack_config_1.default)();
30
30
  console.log(warnings.map((item) => item.message).join("\n"));
31
31
  }
32
32
  console.log(chalk_1.default.yellow(`当前打包工具:webpack@${version}`));
33
- if (assets) {
34
- console.log(chalk_1.default.blue("资源清单:"));
35
- const assetsInfo = assets.map(({ size, name }) => {
36
- return ` ${name} ${chalk_1.default.white(size > 1024 ? `~${Math.floor(size / 1024)}KB` : `${size}B`)}`;
37
- });
38
- assetsInfo.map((item) => {
39
- console.log(chalk_1.default.blue(item));
40
- });
41
- }
42
- else {
43
- console.log(chalk_1.default.blue("无资源清单"));
44
- }
33
+ console.log(chalk_1.default.blue("资源清单:"));
34
+ const assetsInfo = assets.map(({ size, name }) => {
35
+ return ` ${name} ${chalk_1.default.white(size > 1024 ? `~${Math.floor(size / 1024)}KB` : `${size}B`)}`;
36
+ });
37
+ assetsInfo.map((item) => {
38
+ console.log(chalk_1.default.blue(item));
39
+ });
45
40
  });
@@ -16,6 +16,7 @@ const portfinder_1 = __importDefault(require("portfinder"));
16
16
  const open_1 = __importDefault(require("open"));
17
17
  const mainServer_1 = __importDefault(require("../module/mainServer"));
18
18
  const bundleServer_1 = require("../module/bundleServer");
19
+ const kill_port_1 = __importDefault(require("kill-port"));
19
20
  (() => __awaiter(void 0, void 0, void 0, function* () {
20
21
  let defaultPort = 9000;
21
22
  //检测端口占用情况
@@ -28,17 +29,20 @@ const bundleServer_1 = require("../module/bundleServer");
28
29
  stopPort: bundledServerPort + 100,
29
30
  });
30
31
  const compiler = (0, bundleServer_1.createServerCompiler)();
32
+ yield (0, bundleServer_1.runBundleServer)({
33
+ port: bundledServerPort,
34
+ compiler,
35
+ internalDevConfig: {
36
+ allowedHosts: 'all',
37
+ },
38
+ });
31
39
  yield (0, mainServer_1.default)({
32
40
  port: mainServerPort,
33
41
  microPort: bundledServerPort,
34
42
  });
35
43
  (0, open_1.default)(`http://localhost:${mainServerPort}`);
36
- (0, bundleServer_1.runBundleServer)({
37
- port: bundledServerPort,
38
- compiler,
39
- internalDevConfig: {
40
- allowedHosts: "all",
41
- },
44
+ process.on('exit', () => {
45
+ (0, kill_port_1.default)(bundledServerPort, 'tcp').then(console.log).catch(console.log);
42
46
  });
43
47
  }))().catch((err) => {
44
48
  console.log(err);
@@ -0,0 +1 @@
1
+ export declare const getAnnotations: () => any;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.getAnnotations = void 0;
30
+ const micro_utils_1 = require("@tuya-sat/micro-utils");
31
+ const path = __importStar(require("path"));
32
+ const paths_1 = __importDefault(require("../config/paths"));
33
+ const fs_extra_1 = __importDefault(require("fs-extra"));
34
+ const getAnnotations = () => {
35
+ const { multiApps } = require(paths_1.default.microConfig);
36
+ if (multiApps && multiApps.length > 0) {
37
+ return fs_extra_1.default.readJSONSync(path.join(process.cwd(), multiApps[0].dir, 'manifest.json')).annotations;
38
+ }
39
+ else {
40
+ return (0, micro_utils_1.parseManifest)().annotations;
41
+ }
42
+ };
43
+ exports.getAnnotations = getAnnotations;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuya-sat/micro-script",
3
- "version": "3.0.2",
3
+ "version": "3.0.3",
4
4
  "bin": "./dist/bin/cli.js",
5
5
  "type": "commonjs",
6
6
  "license": "MIT",
@@ -20,9 +20,10 @@
20
20
  "@babel/preset-react": "7.16.7",
21
21
  "@babel/preset-typescript": "7.16.7",
22
22
  "@pmmmwh/react-refresh-webpack-plugin": "0.5.4",
23
- "@tuya-sat/micro-dev-loader": "3.0.2",
24
- "@tuya-sat/micro-dev-proxy": "3.0.2",
25
- "@tuya-sat/micro-utils": "3.0.2",
23
+ "@tuya-sat/micro-dev-loader": "3.0.3",
24
+ "@tuya-sat/micro-dev-proxy": "3.0.3",
25
+ "@tuya-sat/micro-utils": "3.0.3",
26
+ "@types/kill-port": "^2.0.0",
26
27
  "babel-loader": "8.2.4",
27
28
  "babel-plugin-import": "1.13.3",
28
29
  "chalk": "4.1.2",
@@ -32,9 +33,11 @@
32
33
  "css-minimizer-webpack-plugin": "3.4.1",
33
34
  "express": "4.17.3",
34
35
  "fork-ts-checker-webpack-plugin": "7.2.1",
36
+ "fs-extra": "^10.1.0",
35
37
  "html-webpack-plugin": "5.5.0",
36
38
  "http-proxy-middleware": "2.0.4",
37
39
  "joi": "17.6.0",
40
+ "kill-port": "^2.0.1",
38
41
  "less": "4.1.2",
39
42
  "less-loader": "10.2.0",
40
43
  "mini-css-extract-plugin": "2.6.0",
@@ -51,19 +54,22 @@
51
54
  "sass-loader": "12.6.0",
52
55
  "style-loader": "3.3.1",
53
56
  "svg-url-loader": "7.1.1",
54
- "tsconfig-paths-webpack-plugin": "3.5.2",
57
+ "tsconfig-paths-webpack-plugin": "^4.0.0",
58
+ "uid": "^2.0.1",
55
59
  "url-loader": "4.1.1",
56
60
  "uuid": "8.3.2",
57
61
  "vue-loader": "17.0.0",
58
- "webpack": "5.70.0",
59
- "webpack-dev-server": "4.7.4",
62
+ "webpack": "5.75.0",
63
+ "webpack-cli": "5.0.1",
64
+ "webpack-dev-server": "4.11.1",
60
65
  "webpack-merge": "5.8.0"
61
66
  },
62
67
  "devDependencies": {
63
- "@types/express": "4.17.14",
68
+ "@types/express": "4.17.13",
64
69
  "@types/jest": "27.4.1",
65
70
  "@types/uuid": "8.3.4",
66
71
  "jest": "27.5.1",
72
+ "terser-webpack-plugin": "^5.3.6",
67
73
  "ts-jest": "27.1.3",
68
74
  "typescript": "4.6.2"
69
75
  },
@@ -1,2 +0,0 @@
1
- import { ThemeCat } from "@tuya-sat/micro-dev-loader/dist/less/utils/index";
2
- export declare const getBaseTheme: () => ThemeCat;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getBaseTheme = void 0;
4
- const index_1 = require("@tuya-sat/micro-dev-loader/dist/less/utils/index");
5
- const getBaseTheme = () => {
6
- const microTheme = process.env.MICRO_THEME;
7
- if (!microTheme || ![index_1.DARK_THEME, index_1.LIGHT_THEME].includes(microTheme))
8
- return index_1.LIGHT_THEME;
9
- return microTheme;
10
- };
11
- exports.getBaseTheme = getBaseTheme;