@qse/edu-scripts 1.12.4 → 1.13.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 +4 -0
- package/docs/debug.md +17 -0
- package/docs/refactor.md +9 -0
- package/lib/config/webpackConfig.js +23 -8
- package/lib/deploy.js +29 -12
- package/package.json +1 -1
- package/src/config/webpackConfig.js +29 -8
- package/src/deploy.js +28 -11
package/CHANGELOG.md
CHANGED
package/docs/debug.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 代码调试
|
|
2
|
+
|
|
3
|
+
## 使用 `React Developer Tools` 调试
|
|
4
|
+
|
|
5
|
+
1. 安装 `React Developer Tools` 插件
|
|
6
|
+
2. 打开控制台(F12)
|
|
7
|
+
3. 切换到 `Component` 标签页
|
|
8
|
+
4. 选中需要查看的组件,可以看到 `state/props/hooks` 等信息
|
|
9
|
+
|
|
10
|
+
## 使用 vscode 调试代码
|
|
11
|
+
|
|
12
|
+
1. 打开 `JavaScript Debug Terminal` 终端,输入 `npm run start` 命令启动项目。
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
2. 按住 `ctrl/command` 点击 `http://localhost:port` 打开链接
|
|
17
|
+
3. 代码里打断点,网页点击触发断点
|
package/docs/refactor.md
CHANGED
|
@@ -24,10 +24,19 @@
|
|
|
24
24
|
<script src="//www.zhidianbao.cn:8088/qsxxwapdev/edu-scripts/react-dev-preset.js"></script>
|
|
25
25
|
<script src="//www.zhidianbao.cn:8088/qsxxwapdev/edu-scripts/moment2.29.1.js"></script>
|
|
26
26
|
<script src="//www.zhidianbao.cn:8088/qsxxwapdev/edu-scripts/antd3.26.20.js"></script>
|
|
27
|
+
|
|
28
|
+
<!-- 如果用到 @qse/antd -->
|
|
29
|
+
<script src="//www.zhidianbao.cn:8088/qsxxwapdev/edu-scripts/qsb-antd.min.js"></script>
|
|
30
|
+
<!-- 如果用到 @qse/scheme-render -->
|
|
31
|
+
<script src="//www.zhidianbao.cn:8088/qsxxwapdev/edu-scripts/qsb-scheme-render.min.js"></script>
|
|
27
32
|
<% } else { %>
|
|
28
33
|
<script src="//static.qsepay.net/lib/react16.14_fastclick1.0.6_natty-storage2.0.2-fetch2.4.2_axios0.21.1_common31.js"></script>
|
|
29
34
|
<script src="//static.qsepay.net/lib/moment2.29.1.js"></script>
|
|
30
35
|
<script src="//static.qsepay.net/lib/antd3.26.20.js"></script>
|
|
36
|
+
|
|
37
|
+
<!-- 如果你是主工程,需要下面这两个文件 -->
|
|
38
|
+
<script src="static/lib/qsb-antd.min.js"></script>
|
|
39
|
+
<script src="static/lib/qsb-scheme-render.min.js"></script>
|
|
31
40
|
<% } %>
|
|
32
41
|
```
|
|
33
42
|
|
|
@@ -34,7 +34,7 @@ const lessRegex = /\.less$/;
|
|
|
34
34
|
const lessModuleRegex = /\.module\.less$/;
|
|
35
35
|
const imageInlineSizeLimit = 10 * 1024;
|
|
36
36
|
|
|
37
|
-
const
|
|
37
|
+
const qseCDN = (() => {
|
|
38
38
|
const contents = paths.indexHTML.map(url => fs.readFileSync(url, 'utf-8'));
|
|
39
39
|
|
|
40
40
|
function include(pattern) {
|
|
@@ -129,26 +129,41 @@ module.exports = function getWebpackConfig(args, override) {
|
|
|
129
129
|
uniqueName: appPkg.name,
|
|
130
130
|
publicPath: ''
|
|
131
131
|
},
|
|
132
|
-
externals: Object.assign({},
|
|
132
|
+
externals: Object.assign({}, qseCDN.isUseCommon && {
|
|
133
133
|
react: 'React',
|
|
134
134
|
'react-dom': 'ReactDOM',
|
|
135
135
|
'natty-fetch': 'nattyFetch',
|
|
136
136
|
'natty-storage': 'nattyStorage',
|
|
137
137
|
'common-utils': 'CommonUtils',
|
|
138
138
|
'@qse/common-utils': 'CommonUtils'
|
|
139
|
-
},
|
|
139
|
+
}, qseCDN.isUseAxios && {
|
|
140
140
|
axios: 'axios'
|
|
141
|
-
},
|
|
141
|
+
}, qseCDN.isUseMoment && {
|
|
142
142
|
moment: 'moment'
|
|
143
|
-
},
|
|
143
|
+
}, qseCDN.isUseAntd && Object.assign({
|
|
144
144
|
react: 'React',
|
|
145
145
|
'react-dom': 'ReactDOM',
|
|
146
146
|
moment: 'moment',
|
|
147
147
|
antd: 'antd'
|
|
148
|
-
},
|
|
148
|
+
}, qseCDN.isUseQsbAntd && {
|
|
149
149
|
'@qse/antd': 'qsbAntd',
|
|
150
150
|
'@qsb/antd': 'qsbAntd'
|
|
151
|
-
},
|
|
151
|
+
}, qseCDN.isUseQsbSchemeRender && {
|
|
152
|
+
'@qse/scheme-render': 'qsbSchemeRender',
|
|
153
|
+
'@qsb/scheme-render': 'qsbSchemeRender'
|
|
154
|
+
}), // 教育工程这些一定都需要 external
|
|
155
|
+
!appConfig.single && Object.assign({
|
|
156
|
+
react: 'React',
|
|
157
|
+
'react-dom': 'ReactDOM',
|
|
158
|
+
'natty-fetch': 'nattyFetch',
|
|
159
|
+
'natty-storage': 'nattyStorage',
|
|
160
|
+
'common-utils': 'CommonUtils',
|
|
161
|
+
'@qse/common-utils': 'CommonUtils',
|
|
162
|
+
moment: 'moment',
|
|
163
|
+
antd: 'antd'
|
|
164
|
+
}, isProd && {
|
|
165
|
+
'@qse/antd': 'qsbAntd',
|
|
166
|
+
'@qsb/antd': 'qsbAntd',
|
|
152
167
|
'@qse/scheme-render': 'qsbSchemeRender',
|
|
153
168
|
'@qsb/scheme-render': 'qsbSchemeRender'
|
|
154
169
|
}), override.externals),
|
|
@@ -290,7 +305,7 @@ module.exports = function getWebpackConfig(args, override) {
|
|
|
290
305
|
}].filter(Boolean)
|
|
291
306
|
}]
|
|
292
307
|
},
|
|
293
|
-
plugins: [
|
|
308
|
+
plugins: [qseCDN.isUseCommon && new webpack.DllReferencePlugin({
|
|
294
309
|
manifest: require('../asset/dll/libcommon3-manifest.json')
|
|
295
310
|
}), new webpack.IgnorePlugin({
|
|
296
311
|
resourceRegExp: /^\.\/locale$/,
|
package/lib/deploy.js
CHANGED
|
@@ -92,22 +92,39 @@ async function normalDeploy(args) {
|
|
|
92
92
|
// 创建本地临时文件夹,位置在 `opts.localPath` 下的 `__tmp__` 文件夹
|
|
93
93
|
fs.mkdirSync(tmpDir, {
|
|
94
94
|
recursive: true
|
|
95
|
-
}); // 拉取远程文件到本地
|
|
96
|
-
|
|
97
|
-
await sftp.fastGet(remoteFile, tmpFile); // 读取本地文件内容
|
|
98
|
-
|
|
99
|
-
let code = await fs.readFile(tmpFile, {
|
|
100
|
-
encoding: 'utf-8'
|
|
101
95
|
});
|
|
102
|
-
|
|
96
|
+
const info = {
|
|
103
97
|
name: pkg.name,
|
|
104
98
|
version: pkg.version,
|
|
105
99
|
grayscale: appConfig.grayscale
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
100
|
+
};
|
|
101
|
+
{
|
|
102
|
+
// 拉取远程文件到本地
|
|
103
|
+
await sftp.fastGet(remoteFile, tmpFile); // 读取本地文件内容
|
|
104
|
+
|
|
105
|
+
let code = await fs.readFile(tmpFile, {
|
|
106
|
+
encoding: 'utf-8'
|
|
107
|
+
});
|
|
108
|
+
code = changeDeployVersion(code, info);
|
|
109
|
+
await sftp.fastPut(tmpFile, remoteFile + '.bak');
|
|
110
|
+
await fs.writeFile(tmpFile, code); // 将修改完的内容传回服务器
|
|
111
|
+
|
|
112
|
+
await sftp.fastPut(tmpFile, remoteFile);
|
|
113
|
+
}
|
|
114
|
+
{
|
|
115
|
+
const remoteLogFile = remoteFile + '.log';
|
|
116
|
+
const tmpLogFile = tmpFile + '.log';
|
|
117
|
+
let content = '';
|
|
118
|
+
|
|
119
|
+
try {
|
|
120
|
+
await sftp.fastGet(remoteLogFile, tmpLogFile);
|
|
121
|
+
content = await fs.readFile(tmpLogFile, 'utf-8');
|
|
122
|
+
} catch (error) {}
|
|
123
|
+
|
|
124
|
+
content += `${new Date().toISOString()} ${JSON.stringify(info)}\n`;
|
|
125
|
+
await fs.writeFile(tmpLogFile, content);
|
|
126
|
+
await sftp.fastPut(tmpLogFile, remoteLogFile);
|
|
127
|
+
}
|
|
111
128
|
spinner.succeed('已更新 ver.js 版本配置');
|
|
112
129
|
} catch (e) {
|
|
113
130
|
spinner.fail(`自动修改 ver.js 失败,请手动修改`);
|
package/package.json
CHANGED
|
@@ -24,7 +24,7 @@ const lessModuleRegex = /\.module\.less$/
|
|
|
24
24
|
|
|
25
25
|
const imageInlineSizeLimit = 10 * 1024
|
|
26
26
|
|
|
27
|
-
const
|
|
27
|
+
const qseCDN = (() => {
|
|
28
28
|
const contents = paths.indexHTML.map((url) => fs.readFileSync(url, 'utf-8'))
|
|
29
29
|
|
|
30
30
|
function include(pattern) {
|
|
@@ -127,7 +127,7 @@ module.exports = function getWebpackConfig(args, override) {
|
|
|
127
127
|
},
|
|
128
128
|
externals: Object.assign(
|
|
129
129
|
{},
|
|
130
|
-
|
|
130
|
+
qseCDN.isUseCommon && {
|
|
131
131
|
react: 'React',
|
|
132
132
|
'react-dom': 'ReactDOM',
|
|
133
133
|
'natty-fetch': 'nattyFetch',
|
|
@@ -135,9 +135,9 @@ module.exports = function getWebpackConfig(args, override) {
|
|
|
135
135
|
'common-utils': 'CommonUtils',
|
|
136
136
|
'@qse/common-utils': 'CommonUtils',
|
|
137
137
|
},
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
qseCDN.isUseAxios && { axios: 'axios' },
|
|
139
|
+
qseCDN.isUseMoment && { moment: 'moment' },
|
|
140
|
+
qseCDN.isUseAntd &&
|
|
141
141
|
Object.assign(
|
|
142
142
|
{
|
|
143
143
|
react: 'React',
|
|
@@ -145,11 +145,32 @@ module.exports = function getWebpackConfig(args, override) {
|
|
|
145
145
|
moment: 'moment',
|
|
146
146
|
antd: 'antd',
|
|
147
147
|
},
|
|
148
|
-
|
|
148
|
+
qseCDN.isUseQsbAntd && {
|
|
149
149
|
'@qse/antd': 'qsbAntd',
|
|
150
150
|
'@qsb/antd': 'qsbAntd',
|
|
151
151
|
},
|
|
152
|
-
|
|
152
|
+
qseCDN.isUseQsbSchemeRender && {
|
|
153
|
+
'@qse/scheme-render': 'qsbSchemeRender',
|
|
154
|
+
'@qsb/scheme-render': 'qsbSchemeRender',
|
|
155
|
+
}
|
|
156
|
+
),
|
|
157
|
+
|
|
158
|
+
// 教育工程这些一定都需要 external
|
|
159
|
+
!appConfig.single &&
|
|
160
|
+
Object.assign(
|
|
161
|
+
{
|
|
162
|
+
react: 'React',
|
|
163
|
+
'react-dom': 'ReactDOM',
|
|
164
|
+
'natty-fetch': 'nattyFetch',
|
|
165
|
+
'natty-storage': 'nattyStorage',
|
|
166
|
+
'common-utils': 'CommonUtils',
|
|
167
|
+
'@qse/common-utils': 'CommonUtils',
|
|
168
|
+
moment: 'moment',
|
|
169
|
+
antd: 'antd',
|
|
170
|
+
},
|
|
171
|
+
isProd && {
|
|
172
|
+
'@qse/antd': 'qsbAntd',
|
|
173
|
+
'@qsb/antd': 'qsbAntd',
|
|
153
174
|
'@qse/scheme-render': 'qsbSchemeRender',
|
|
154
175
|
'@qsb/scheme-render': 'qsbSchemeRender',
|
|
155
176
|
}
|
|
@@ -306,7 +327,7 @@ module.exports = function getWebpackConfig(args, override) {
|
|
|
306
327
|
],
|
|
307
328
|
},
|
|
308
329
|
plugins: [
|
|
309
|
-
|
|
330
|
+
qseCDN.isUseCommon &&
|
|
310
331
|
new webpack.DllReferencePlugin({
|
|
311
332
|
manifest: require('../asset/dll/libcommon3-manifest.json'),
|
|
312
333
|
}),
|
package/src/deploy.js
CHANGED
|
@@ -69,21 +69,38 @@ async function normalDeploy(args) {
|
|
|
69
69
|
// 创建本地临时文件夹,位置在 `opts.localPath` 下的 `__tmp__` 文件夹
|
|
70
70
|
fs.mkdirSync(tmpDir, { recursive: true })
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
await sftp.fastGet(remoteFile, tmpFile)
|
|
74
|
-
|
|
75
|
-
// 读取本地文件内容
|
|
76
|
-
let code = await fs.readFile(tmpFile, { encoding: 'utf-8' })
|
|
77
|
-
code = changeDeployVersion(code, {
|
|
72
|
+
const info = {
|
|
78
73
|
name: pkg.name,
|
|
79
74
|
version: pkg.version,
|
|
80
75
|
grayscale: appConfig.grayscale,
|
|
81
|
-
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
{
|
|
79
|
+
// 拉取远程文件到本地
|
|
80
|
+
await sftp.fastGet(remoteFile, tmpFile)
|
|
81
|
+
|
|
82
|
+
// 读取本地文件内容
|
|
83
|
+
let code = await fs.readFile(tmpFile, { encoding: 'utf-8' })
|
|
84
|
+
code = changeDeployVersion(code, info)
|
|
82
85
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
await sftp.fastPut(tmpFile, remoteFile + '.bak')
|
|
87
|
+
await fs.writeFile(tmpFile, code)
|
|
88
|
+
// 将修改完的内容传回服务器
|
|
89
|
+
await sftp.fastPut(tmpFile, remoteFile)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
{
|
|
93
|
+
const remoteLogFile = remoteFile + '.log'
|
|
94
|
+
const tmpLogFile = tmpFile + '.log'
|
|
95
|
+
let content = ''
|
|
96
|
+
try {
|
|
97
|
+
await sftp.fastGet(remoteLogFile, tmpLogFile)
|
|
98
|
+
content = await fs.readFile(tmpLogFile, 'utf-8')
|
|
99
|
+
} catch (error) {}
|
|
100
|
+
content += `${new Date().toISOString()} ${JSON.stringify(info)}\n`
|
|
101
|
+
await fs.writeFile(tmpLogFile, content)
|
|
102
|
+
await sftp.fastPut(tmpLogFile, remoteLogFile)
|
|
103
|
+
}
|
|
87
104
|
|
|
88
105
|
spinner.succeed('已更新 ver.js 版本配置')
|
|
89
106
|
} catch (e) {
|