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.
- package/build/postcss.config.js +1 -1
- package/build/start.sh +30 -8
- package/build/vite.config.js +159 -0
- package/build/vite.package.json +25 -0
- package/package.json +1 -1
- package/readme.md +3 -0
- package/src/build.js +28 -2
package/build/postcss.config.js
CHANGED
|
@@ -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
|
-
|
|
119
|
-
if [ "${dev_mode}" = "watch" ]
|
|
118
|
+
if [ -n "$devTool" ] && [ $devTool = "vite" ]
|
|
120
119
|
then
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
showLog "开始运行vite"
|
|
121
|
+
npx vite
|
|
123
122
|
else
|
|
124
|
-
npm run dev
|
|
125
|
-
|
|
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
|
-
|
|
136
|
-
|
|
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
package/readme.md
CHANGED
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
|
-
|
|
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){
|