kn-cli 1.0.123 → 1.0.124

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.
@@ -14,7 +14,7 @@ const plugins = [
14
14
  ];
15
15
  if(pxtorem){
16
16
  writeLog('启用pxtorem');
17
- plugins.push( require("postcss-pxtorem")({rootValue:100,propList:['*']}) )
17
+ plugins.push( require("postcss-pxtorem")({rootValue:100,propList:['*'],minPixelValue:3}) )
18
18
  }else{
19
19
  writeLog('关闭pxtorem');
20
20
  }
package/build/start.sh CHANGED
@@ -115,14 +115,20 @@ build(){
115
115
 
116
116
  if [ -n "$build_type" ] && [ $build_type = "dev" ]
117
117
  then
118
- showLog "开始npm run dev"
119
- if [ "${dev_mode}" = "watch" ]
118
+ if [ -n "$devTool" ] && [ $devTool = "vite" ]
120
119
  then
121
- npm run dev:watch
122
- checkResult "npm run dev:watch"
120
+ showLog "开始运行vite"
121
+ npx vite
123
122
  else
124
- npm run dev
125
- checkResult "npm run dev"
123
+ showLog "开始npm run dev"
124
+ if [ "${dev_mode}" = "watch" ]
125
+ then
126
+ npm run dev:watch
127
+ checkResult "npm run dev:watch"
128
+ else
129
+ npm run dev
130
+ checkResult "npm run dev"
131
+ fi
126
132
  fi
127
133
  else
128
134
  showLog "开始npm run build"
@@ -132,8 +138,24 @@ build(){
132
138
  }
133
139
 
134
140
 
135
- checkNode "v16.18.0"
136
- checkResult "检查node"
141
+ showNormal "检查devTool:${devTool}"
142
+
143
+ if [ -n "$build_type" ] && [ $build_type = "dev" ]
144
+ then
145
+ if [ -n "$devTool" ] && [ $devTool = "vite" ]
146
+ then
147
+ checkNode "v20.19.0"
148
+ checkResult "检查node"
149
+ else
150
+ checkNode "v16.18.0"
151
+ checkResult "检查node"
152
+ fi
153
+ else
154
+ checkNode "v16.18.0"
155
+ checkResult "检查node"
156
+ fi
157
+
158
+
137
159
 
138
160
  build
139
161
  checkResult "start.sh"
@@ -0,0 +1,159 @@
1
+ import { defineConfig } from 'vite';
2
+ import { createHtmlPlugin } from 'vite-plugin-html';
3
+ import react from '@vitejs/plugin-react';
4
+ import path from 'path';
5
+ import API_CONFIG from './webpack.api';
6
+ import CLI_CONFIG from './cli.config';
7
+
8
+ const dirname = __dirname;
9
+ const webpackPath=__webpackPath;
10
+
11
+
12
+ const resource_path_relative= CLI_CONFIG?.site_root_path??'/';
13
+ const entry = CLI_CONFIG?.entry??path.resolve(dirname,'src');
14
+ const devServer=CLI_CONFIG?.devServer??{};
15
+
16
+ // @ts-ignore
17
+ const host = devServer?.host??'localhost';
18
+ // @ts-ignore
19
+ const port = devServer?.port??8080;
20
+ const protocol=CLI_CONFIG?.https?'https:':'http:';
21
+
22
+ let optimizeDeps=undefined;
23
+ if(typeof entry != 'string'){
24
+ console.log('cli.config.js的entry配置错误,不支持vite');
25
+ }
26
+
27
+ if(CLI_CONFIG?.rules?.compileNpmPackage){
28
+ optimizeDeps={
29
+ include:CLI_CONFIG?.rules?.compileNpmPackage,
30
+ esbuildOptions:{
31
+ loader: {
32
+ '.js': 'jsx', // 显式告诉 esbuild,遇到 .js 后缀也用 jsx loader
33
+ },
34
+ }
35
+ };
36
+ }
37
+
38
+ const NowDateTime = Date.now();
39
+
40
+ const appVersion= CLI_CONFIG?.version ?? '';
41
+
42
+ const {API_PROXY,API_HOSTS} = API_CONFIG;
43
+
44
+ let API_HOST={};
45
+ if(API_HOSTS){
46
+ let apiKeys = Object.keys(API_HOSTS);
47
+ apiKeys.map(key=>{
48
+ API_HOST[key] = JSON.stringify(API_HOSTS[key])
49
+ });
50
+ }
51
+
52
+ let PROXY={}
53
+ if(API_PROXY){
54
+ Object.keys(API_PROXY)?.forEach(key=>{
55
+ let item = API_PROXY[key];
56
+ PROXY[key]={
57
+ target:item.target,
58
+ changeOrigin:item.changeOrigin,
59
+ }
60
+ PROXY[key].rewrite=path=>{
61
+ Object.keys(item.pathRewrite)?.forEach(pathKey=>{
62
+ path = path.replace(new RegExp(pathKey),item.pathRewrite[pathKey]);
63
+ })
64
+ return path;
65
+ }
66
+ })
67
+ }
68
+
69
+
70
+ function warn(txt){
71
+ console.log(`\x1b[40;32m %s \x1b[0m`,txt);
72
+ }
73
+ warn(`=====================env=========================`);
74
+ warn(`dirname:${dirname}`);
75
+ warn(`build_env:${process.env.build_env}`);
76
+ warn(`mock:${process.env.mock}`);
77
+ warn(`noSkipNpmInstall:${process.env.noSkipNpmInstall}`);
78
+ warn(`build_log_level:${process.env.build_log_level}`);
79
+ warn(`=====================env end=========================`);
80
+
81
+ export default defineConfig({
82
+ base:resource_path_relative,
83
+ root:dirname,
84
+ resolve: {
85
+ alias:[
86
+ {
87
+ find: /^~@/,
88
+ replacement: path.resolve(dirname,'src'),
89
+ },
90
+ {
91
+ find: /^~(?=[^@])/,
92
+ replacement: '',
93
+ },
94
+ {
95
+ find: /^@\//,
96
+ replacement: path.resolve(dirname,'src')+'/',
97
+ }
98
+ ]
99
+ },
100
+ plugins: [
101
+ react(),
102
+ createHtmlPlugin({
103
+ entry: 'src/index.jsx',
104
+ inject: {
105
+ data: {
106
+ // 这里定义 HTML 中需要的变量
107
+ BUILD_ENV: (process.env.build_env),
108
+ APP_VERSION: (appVersion),
109
+ SITE_NAME:(CLI_CONFIG.name),
110
+ }
111
+ }
112
+ }),
113
+ ],
114
+ // 如果你还在用 .js 后缀写 JSX,这行必不可少
115
+ // esbuild: {
116
+ // loader: "jsx",
117
+ // include: /[.]jsx?$/
118
+ // },
119
+ // 2. 针对预构建(重要):解决 node_modules 或启动时的转换报错
120
+ // @ts-ignore
121
+ optimizeDeps,
122
+ server: {
123
+ host,
124
+ port,
125
+ // @ts-ignore
126
+ open: devServer?.open??`${protocol}//${host}:${port}`,
127
+ // @ts-ignore
128
+ proxy:PROXY,
129
+ fs: {
130
+ allow: [
131
+ // 允许访问项目源码目录
132
+ dirname,
133
+ // 允许访问 Vite 配置所在的目录(为了读取 node_modules 等)
134
+ path.resolve(__dirname)
135
+ ]
136
+ },
137
+ },
138
+ css: {
139
+ preprocessorOptions: {
140
+ less: {
141
+ javascriptEnabled: CLI_CONFIG?.less?.javascriptEnabled??false,
142
+ modifyVars:CLI_CONFIG?.less?.modifyVars??false,
143
+ },
144
+ },
145
+ modules: {
146
+ localsConvention: 'camelCaseOnly',
147
+ generateScopedName: '[local]--[hash:base64:5]',
148
+ },
149
+ },
150
+ define: {
151
+ VERSION_HASH: JSON.stringify(`${NowDateTime}-${new Date().toLocaleString()}`),
152
+ BUILD_ENV: JSON.stringify(process.env.build_env),
153
+ APP_VERSION: JSON.stringify(appVersion),
154
+ SITE_NAME:JSON.stringify(CLI_CONFIG.name),
155
+ // @ts-ignore
156
+ MOCK: process?.env?.mock == 1 ? '1' : false, //JSON.stringify(process.env.mock)
157
+ ...API_HOST,
158
+ }
159
+ })
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "app",
3
+ "version": "1.0.0",
4
+ "main": "lib/index",
5
+ "scripts": {
6
+ "dev": "npx vite"
7
+ },
8
+ "license": "MIT",
9
+ "dependencies": {},
10
+ "devDependencies": {
11
+ "@types/react": "~17.0.2",
12
+ "@types/react-dom": "~17.0.2",
13
+ "mockjs-async": "~0.0.5",
14
+ "@vitejs/plugin-react": "~4.3.4",
15
+ "less": "~4.2.2",
16
+ "vite": "~6.4.1",
17
+ "postcss-preset-env": "~7.8.3",
18
+ "postcss-pxtorem": "~5.1.1",
19
+ "vite-plugin-html": "~3.2.2"
20
+ },
21
+ "overrides": {
22
+ "@jridgewell/gen-mapping": "0.3.5"
23
+ },
24
+ "browserslist": ["> 0.05%"]
25
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kn-cli",
3
- "version": "1.0.123",
3
+ "version": "1.0.124",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/readme.md CHANGED
@@ -140,6 +140,9 @@ report
140
140
 
141
141
 
142
142
  # 更新日志
143
+ * 1.0.124
144
+ 支持vite6调试模式,由于@vitejs/plugin-react目前稳定版本只有4.3.4还不完全支持vite7,所以暂时使用vite6
145
+
143
146
  * 1.0.120
144
147
  支持??=语法编译
145
148
 
package/src/build.js CHANGED
@@ -48,13 +48,17 @@ module.exports= async (options={})=> {
48
48
  const sourceDir = path.resolve(projectPath,'public');
49
49
  // 用户项目文件夹下的package.json
50
50
  const projectPackagePath = path.resolve(projectPath,'package.json');
51
+
51
52
  const tempDir = path.resolve(ROOT,'temp');
52
53
  const tempProjectDir = path.resolve(tempDir,projectName);
53
54
  // 构建模板
54
55
  const tempWebpackDir = path.resolve(tempProjectDir,"_webpack");
55
56
  const tempWebpackPackagePath = path.resolve(tempWebpackDir,'package.json');
57
+ const tempVitePackagePath = path.resolve(tempWebpackDir,'vite.package.json');
56
58
  const tempWebpackConfigPath = path.resolve(tempWebpackDir,'webpack.config.js');
57
59
  const tempStartShell = path.resolve(tempWebpackDir,'start.sh');
60
+ const tempViteConfigPath = path.resolve(tempWebpackDir,'vite.config.js');
61
+
58
62
 
59
63
  let projectPackage,webpackPackage;
60
64
 
@@ -63,6 +67,13 @@ module.exports= async (options={})=> {
63
67
 
64
68
  if(type=='dev'){
65
69
  answer = await inquirer.prompt([
70
+ {
71
+ name:'devTool',
72
+ type:'list',
73
+ message:'选择调试工具',
74
+ choices:['webpack','vite'],
75
+ default:'webpack'
76
+ },
66
77
  {
67
78
  name:'type',
68
79
  type:'list',
@@ -85,10 +96,11 @@ module.exports= async (options={})=> {
85
96
  default:'不需要'
86
97
  },
87
98
  ]);
99
+
88
100
  }
89
101
  let logCount='';
90
102
  const tasks = new Listr([
91
- {...TaskNodeVersion},
103
+ // {...TaskNodeVersion},
92
104
  {
93
105
  title:"创建临时缓存文件夹",
94
106
  task:async (ctx,task)=>{
@@ -162,7 +174,12 @@ module.exports= async (options={})=> {
162
174
  try{
163
175
  task.title='开始构造package'
164
176
  projectPackage= require(projectPackagePath);
165
- webpackPackage= require(tempWebpackPackagePath);
177
+ if(type == 'dev' && answer?.devTool == 'vite'){
178
+ webpackPackage= require(tempVitePackagePath);
179
+ }else{
180
+ webpackPackage= require(tempWebpackPackagePath);
181
+ }
182
+
166
183
  // 将项目文件夹下的package.json内dependencies部分合并入 _webpack/package.json
167
184
  webpackPackage.dependencies = {...webpackPackage.dependencies ,...projectPackage.dependencies};
168
185
  webpackPackage.devDependencies = {...webpackPackage.devDependencies ,...projectPackage.devDependencies};
@@ -262,6 +279,11 @@ module.exports= async (options={})=> {
262
279
  data = data.replace(/__dirname/ig,`${TransformWindowsPath(sourceFolder)}`);
263
280
  return data;
264
281
  })
282
+ await replaceFileData(tempViteConfigPath,function(data){
283
+ data = data.replace(/__dirname/ig,`"${TransformWindowsPath(sourceFolder)}"`);
284
+ data = data.replace(/__webpackPath/ig,`"${TransformWindowsPath(tempWebpackDir)}"`);
285
+ return data;
286
+ });
265
287
  resolve();
266
288
  }catch(ex){
267
289
  throw new Error(`
@@ -323,6 +345,7 @@ module.exports= async (options={})=> {
323
345
  let build_env='';
324
346
  let mock='';
325
347
  let noSkipNpmInstall='';
348
+ let devTool=answer?.devTool||'webpack';
326
349
  switch(answer?.type){
327
350
  case '本地调试':{build_env='localdebug'}break;
328
351
  case '测试环境':{build_env='dev'}break;
@@ -345,6 +368,9 @@ module.exports= async (options={})=> {
345
368
  if(noSkipNpmInstall){
346
369
  cmdParams.push(`noSkipNpmInstall=${noSkipNpmInstall}`)
347
370
  }
371
+ if(devTool){
372
+ cmdParams.push(`devTool=${devTool}`)
373
+ }
348
374
  }
349
375
 
350
376
  if(cliConfig?.registryType){