@qse/edu-scripts 1.15.0 → 2.0.1
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 -489
- package/asset/rspack-dev-server-client.js +534 -0
- package/{src/asset → asset}/template/edu-scripts.override.js.tpl +2 -2
- package/{lib/asset → asset}/template/tailwind.config.js.tpl +1 -1
- package/babel.config.json +6 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +1432 -0
- package/dist/index.d.mts +83 -0
- package/dist/index.mjs +13 -0
- package/eslint.config.mjs +3 -0
- package/{jest.config.js → jest.config.mjs} +8 -4
- package/package.json +67 -67
- package/pnpm-workspace.yaml +2 -0
- package/src/{auto-refactor.js → auto-refactor.ts} +51 -59
- package/src/{build.js → build.ts} +22 -16
- package/src/{cli.js → cli.ts} +26 -21
- package/src/{commit-dist.js → commit-dist.ts} +28 -21
- package/src/config/paths.ts +52 -0
- package/src/config/plugins/mock-server/{index.js → index.ts} +30 -41
- package/src/config/plugins/{postcss-safe-area.js → postcss-safe-area.ts} +4 -2
- package/src/config/{webpackConfig.js → webpackConfig.ts} +157 -126
- package/src/config/{webpackDevServerConfig.js → webpackDevServerConfig.ts} +18 -18
- package/src/{deploy.js → deploy.ts} +36 -25
- package/src/{generator.js → generator.ts} +5 -14
- package/src/start.ts +52 -0
- package/src/utils/FileSizeReporter.ts +166 -0
- package/src/utils/{appConfig.js → appConfig.ts} +5 -4
- package/src/utils/{beforeStart.js → beforeStart.ts} +19 -7
- package/src/utils/{changeDeployVersion.js → changeDeployVersion.ts} +43 -48
- package/src/utils/defineConfig.ts +19 -36
- package/src/utils/esm-register.ts +6 -0
- package/src/utils/{exec.js → exec.ts} +3 -3
- package/src/utils/{getConfig.js → getConfig.ts} +7 -5
- package/src/utils/getOverride.ts +32 -0
- package/src/utils/resolveModule.ts +3 -0
- package/tsconfig.json +3 -15
- package/tsdown.config.ts +5 -0
- package/docs/changelog.md +0 -5
- package/docs/debug.md +0 -17
- package/docs/deploy.md +0 -54
- package/docs/faq.md +0 -144
- package/docs/feat.md +0 -167
- package/docs/grayscale.md +0 -31
- package/docs/index.md +0 -5
- package/docs/mode.md +0 -42
- package/docs/override.md +0 -193
- package/docs/refactor-react-16.md +0 -37
- package/docs/refactor.md +0 -67
- package/docs/static.md +0 -24
- package/lib/asset/template/edu-scripts.override.js.tpl +0 -7
- package/lib/auto-refactor.js +0 -151
- package/lib/build.js +0 -59
- package/lib/cli.js +0 -66
- package/lib/commit-dist.js +0 -79
- package/lib/config/babel.dependencies.js +0 -79
- package/lib/config/babel.js +0 -107
- package/lib/config/paths.js +0 -36
- package/lib/config/plugins/babel-plugin-add-webpack-chunk-name.js +0 -31
- package/lib/config/plugins/mock-server/defineMock.d.ts +0 -6
- package/lib/config/plugins/mock-server/defineMock.js +0 -31
- package/lib/config/plugins/mock-server/index.js +0 -122
- package/lib/config/plugins/postcss-safe-area.js +0 -19
- package/lib/config/plugins/ws-utils-createSocketURL.js +0 -118
- package/lib/config/webpackConfig.js +0 -462
- package/lib/config/webpackDevServerConfig.js +0 -72
- package/lib/deploy.js +0 -143
- package/lib/generator.js +0 -50
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -32
- package/lib/start.js +0 -36
- package/lib/utils/FileSizeReporter.js +0 -107
- package/lib/utils/appConfig.js +0 -32
- package/lib/utils/beforeStart.js +0 -50
- package/lib/utils/changeDeployVersion.js +0 -89
- package/lib/utils/defineConfig.d.ts +0 -93
- package/lib/utils/defineConfig.js +0 -31
- package/lib/utils/exec.js +0 -7
- package/lib/utils/getConfig.js +0 -20
- package/lib/utils/getOverride.js +0 -61
- package/src/asset/dll/libcommon3-manifest.json +0 -181
- package/src/asset/template/edu-app-env.d.ts.tpl +0 -20
- package/src/asset/template/tailwind.config.js.tpl +0 -11
- package/src/asset/template/tsconfig.json.tpl +0 -24
- package/src/config/babel.dependencies.js +0 -66
- package/src/config/babel.js +0 -94
- package/src/config/paths.js +0 -38
- package/src/config/plugins/babel-plugin-add-webpack-chunk-name.js +0 -55
- package/src/config/plugins/ws-utils-createSocketURL.js +0 -140
- package/src/start.js +0 -44
- package/src/utils/FileSizeReporter.js +0 -151
- package/src/utils/getOverride.js +0 -48
- /package/{lib/asset → asset}/dll/libcommon3-manifest.json +0 -0
- /package/{lib/asset → asset}/template/edu-app-env.d.ts.tpl +0 -0
- /package/{lib/asset → asset}/template/tsconfig.json.tpl +0 -0
package/docs/refactor.md
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# 老项目接入流程
|
|
2
|
-
|
|
3
|
-
## 事前约定
|
|
4
|
-
|
|
5
|
-
`package.json` 中约定了 `name` 和 `version` 的含义
|
|
6
|
-
|
|
7
|
-
```json
|
|
8
|
-
{
|
|
9
|
-
"name": "项目名称,打包部署后都是这个名字",
|
|
10
|
-
"version": "版本号"
|
|
11
|
-
}
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## 重构
|
|
15
|
-
|
|
16
|
-
运行 `npx @qse/edu-scripts auto-refactor` 自动重构项目,按终端提示进行操作
|
|
17
|
-
|
|
18
|
-
运行完毕后接着按下面的步骤修改代码
|
|
19
|
-
|
|
20
|
-
1. `index1.html` 增加 CDN
|
|
21
|
-
|
|
22
|
-
```html
|
|
23
|
-
<% if(process.env.NODE_ENV === 'development') { %>
|
|
24
|
-
<script src="https://www.zhidianbao.cn:8443/qsxxwapdev/edu-scripts/react-dev-preset.js"></script>
|
|
25
|
-
<script src="https://www.zhidianbao.cn:8443/qsxxwapdev/edu-scripts/moment2.29.1.js"></script>
|
|
26
|
-
<script src="https://www.zhidianbao.cn:8443/qsxxwapdev/edu-scripts/antd3.26.20.js"></script>
|
|
27
|
-
<script src="https://registry.npmmirror.com/@qse/antd/latest/files/dist/qsb-antd.min.js"></script>
|
|
28
|
-
<script src="https://registry.npmmirror.com/@qse/scheme-render/latest/files/dist/qsb-scheme-render.min.js"></script>
|
|
29
|
-
<% } else { %>
|
|
30
|
-
<script src="//static.qsepay.net/lib/react16.14_fastclick1.0.6_natty-storage2.0.2-fetch2.4.2_axios0.21.1_common31.js"></script>
|
|
31
|
-
<script src="//static.qsepay.net/lib/moment2.29.1.js"></script>
|
|
32
|
-
<script src="//static.qsepay.net/lib/antd3.26.20.js"></script>
|
|
33
|
-
|
|
34
|
-
<!-- 如果你是主工程,需要下面这两个文件 -->
|
|
35
|
-
<script src="static/lib/qsb-antd.min.js"></script>
|
|
36
|
-
<script src="static/lib/qsb-scheme-render.min.js"></script>
|
|
37
|
-
<% } %>
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
如果你的钉钉容器打不开应用,可以添加动态的 `polyfill` 解决问题
|
|
41
|
-
|
|
42
|
-
```html
|
|
43
|
-
<!-- polyfill 官网 -->
|
|
44
|
-
<script src="https://polyfill.io/v3/polyfill.min.js?features=default,es2015,es2016,es2017" crossorigin="anonymous"></script>
|
|
45
|
-
|
|
46
|
-
<!-- 阿里云镜像 -->
|
|
47
|
-
<script src="https://polyfill.alicdn.com/v3/polyfill.min.js?features=default,es2015,es2016,es2017" crossorigin="anonymous"></script>
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
2. `index1.html` 修改主文件
|
|
51
|
-
|
|
52
|
-
```html
|
|
53
|
-
<!-- 可选,动态主文件 -->
|
|
54
|
-
<script src="<%= htmlWebpackPlugin.files.js %>"></script>
|
|
55
|
-
|
|
56
|
-
<!-- 示例 -->
|
|
57
|
-
<script src="js/utils_2.0.0.js"></script>
|
|
58
|
-
<script src="<%= htmlWebpackPlugin.files.js %>"></script>
|
|
59
|
-
<script src="js/frame/frame_2.10.0.js"></script>
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
3. 运行 `npm i` 安装依赖
|
|
63
|
-
4. 运行项目 `npm run start` 参照下方排除错误
|
|
64
|
-
|
|
65
|
-
## 报错处理
|
|
66
|
-
|
|
67
|
-
请看[错误处理](faq.md)
|
package/docs/static.md
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# 静态资源
|
|
2
|
-
|
|
3
|
-
## 开发环境使用的静态资源
|
|
4
|
-
|
|
5
|
-
```html
|
|
6
|
-
<script src="https://www.zhidianbao.cn:8443/qsxxwapdev/edu-scripts/react-dev-preset.js"></script>
|
|
7
|
-
<script src="https://www.zhidianbao.cn:8443/qsxxwapdev/edu-scripts/moment2.29.1.js"></script>
|
|
8
|
-
<script src="https://www.zhidianbao.cn:8443/qsxxwapdev/edu-scripts/antd3.26.20.js"></script>
|
|
9
|
-
<script src="https://registry.npmmirror.com/@qse/antd/latest/files/dist/qsb-antd.min.js"></script>
|
|
10
|
-
<script src="https://registry.npmmirror.com/@qse/scheme-render/latest/files/dist/qsb-scheme-render.min.js"></script>
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## 生产环境使用的静态资源
|
|
14
|
-
|
|
15
|
-
```html
|
|
16
|
-
<!-- 包含 react react-dom natty-fetch common-utils dll(refast react-keeper) -->
|
|
17
|
-
<script src="//static.qsepay.net/lib/react16.14_fastclick1.0.6_natty-storage2.0.2-fetch2.4.2_common31.js"></script>
|
|
18
|
-
<!-- 额外包含 axios @0.21.1 -->
|
|
19
|
-
<script src="//static.qsepay.net/lib/react16.14_fastclick1.0.6_natty-storage2.0.2-fetch2.4.2_axios0.21.1_common31.js"></script>
|
|
20
|
-
|
|
21
|
-
<!-- 包含 moment 与 moment-locale-zh-cn -->
|
|
22
|
-
<script src="//static.qsepay.net/lib/moment2.29.1.js"></script>
|
|
23
|
-
<script src="//static.qsepay.net/lib/antd3.26.20.js"></script>
|
|
24
|
-
```
|
package/lib/auto-refactor.js
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
// src/auto-refactor.js
|
|
2
|
-
var fs = require("fs-extra");
|
|
3
|
-
var paths = require("./config/paths");
|
|
4
|
-
var path = require("path");
|
|
5
|
-
var chalk = require("chalk");
|
|
6
|
-
var pkg = require("../package.json");
|
|
7
|
-
var glob = require("globby");
|
|
8
|
-
var ora = require("ora");
|
|
9
|
-
var { prompt } = require("inquirer");
|
|
10
|
-
var open = require("open");
|
|
11
|
-
async function step(msg, callback) {
|
|
12
|
-
const spinner = ora(msg).start();
|
|
13
|
-
try {
|
|
14
|
-
await callback(spinner);
|
|
15
|
-
spinner.succeed();
|
|
16
|
-
} catch (error) {
|
|
17
|
-
spinner.fail();
|
|
18
|
-
throw error;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
module.exports = async function autoRefactor() {
|
|
22
|
-
if (await fs.pathExists(paths.public)) {
|
|
23
|
-
console.log(chalk.green("已完成改造,不需要重复执行,如果运行报错请查看文档"));
|
|
24
|
-
console.log(`文档: ${chalk.underline(pkg.homepage)}`);
|
|
25
|
-
process.exit(0);
|
|
26
|
-
}
|
|
27
|
-
const appPkg = require(paths.package);
|
|
28
|
-
const answers = await prompt([
|
|
29
|
-
{
|
|
30
|
-
type: "input",
|
|
31
|
-
name: "name",
|
|
32
|
-
message: "请输入模块名称,要求唯一,不能与其他工程相同",
|
|
33
|
-
default: appPkg.name,
|
|
34
|
-
validate: (v) => /^[a-z][a-z0-9_-]+$/.test(v) || "请按格式输入 /^[a-z][a-z0-9_-]+$/ 只能使用小写字母、连字符、下划线"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
type: "input",
|
|
38
|
-
name: "version",
|
|
39
|
-
message: "版本号",
|
|
40
|
-
default: "1.0.0",
|
|
41
|
-
validate: (v) => /^\d+\.\d+\.\d+$/.test(v) || "请按格式输入 /^\\d+\\.\\d+\\.\\d+$/ 例如: 1.0.0"
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
type: "list",
|
|
45
|
-
name: "mode",
|
|
46
|
-
message: "项目使用的哪种模式",
|
|
47
|
-
choices: [
|
|
48
|
-
{ name: "教育子工程模式", value: "" },
|
|
49
|
-
{ name: "教育主工程模式", value: "main" },
|
|
50
|
-
{ name: "独立模式", value: "single" }
|
|
51
|
-
]
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
type: "checkbox",
|
|
55
|
-
name: "deploy",
|
|
56
|
-
message: "项目需要部署到哪里",
|
|
57
|
-
when: (ans) => ans.mode !== "single",
|
|
58
|
-
choices: [
|
|
59
|
-
{ name: "校端", value: "-s" },
|
|
60
|
-
{ name: "局端", value: "-b" },
|
|
61
|
-
{ name: "公文端", value: "-d" }
|
|
62
|
-
],
|
|
63
|
-
validate: (v) => !!v && v.length > 0 || "必须选一个"
|
|
64
|
-
}
|
|
65
|
-
]);
|
|
66
|
-
appPkg.name = answers.name;
|
|
67
|
-
appPkg.version = answers.version;
|
|
68
|
-
await step("创建 public 文件夹", async () => {
|
|
69
|
-
await fs.mkdir(paths.public);
|
|
70
|
-
});
|
|
71
|
-
await step("移动 js 文件夹", async () => {
|
|
72
|
-
if (await fs.pathExists(path.resolve(paths.src, "js"))) {
|
|
73
|
-
await fs.move(path.resolve(paths.src, "js"), path.resolve(paths.public, "js"));
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
await step("移动 html 文件", async () => {
|
|
77
|
-
const HTMLFiles = await glob("*.html", { cwd: paths.src });
|
|
78
|
-
for (const file of HTMLFiles) {
|
|
79
|
-
await fs.move(path.resolve(paths.src, file), path.resolve(paths.public, file));
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
await step("删除 dll 文件夹", async () => {
|
|
83
|
-
if (await fs.pathExists(path.resolve(paths.src, "dll"))) {
|
|
84
|
-
await fs.remove(path.resolve(paths.src, "dll"));
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
await step("删除没用的 babel 和 webpack 配置", async () => {
|
|
88
|
-
const deleteFiles = [
|
|
89
|
-
...await glob("{.,*}babel*"),
|
|
90
|
-
...await glob("*webpack*"),
|
|
91
|
-
...await glob("package-lock.json"),
|
|
92
|
-
paths.nodeModules,
|
|
93
|
-
paths.sshSftp
|
|
94
|
-
];
|
|
95
|
-
for (const filePath of deleteFiles) {
|
|
96
|
-
await fs.remove(filePath);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
await step("设置项目模式", () => {
|
|
100
|
-
if (answers.mode) {
|
|
101
|
-
appPkg.edu = { mode: answers.mode };
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
await step("修改 package.json 的 scripts", () => {
|
|
105
|
-
const scripts = appPkg.scripts;
|
|
106
|
-
scripts.start = "edu-scripts start";
|
|
107
|
-
scripts.build = "edu-scripts build";
|
|
108
|
-
scripts.analyze = "edu-scripts build --analyze";
|
|
109
|
-
if (answers.mode !== "single") {
|
|
110
|
-
scripts.deploy = `edu-scripts deploy ${answers.deploy.join(" ")}`;
|
|
111
|
-
} else {
|
|
112
|
-
scripts.deploy = `edu-scripts deploy`;
|
|
113
|
-
scripts["commit-dist"] = "edu-scripts commit-dist --rm-local";
|
|
114
|
-
}
|
|
115
|
-
scripts["one-key-deploy"] = "npm version patch";
|
|
116
|
-
scripts.postversion = "npm run build && npm run deploy";
|
|
117
|
-
});
|
|
118
|
-
await step("删除 babel/webpack 相关依赖", (spinner) => {
|
|
119
|
-
const deleteRe = /(babel|autoprefixer|webpack|loader|less|css|sass|hmr|ssh-sftp|regenerator-runtime|nowa|prettier)/i;
|
|
120
|
-
const deletePkgs = {
|
|
121
|
-
dependencies: [],
|
|
122
|
-
devDependencies: []
|
|
123
|
-
};
|
|
124
|
-
Object.entries(deletePkgs).forEach(([scope, pkgs]) => {
|
|
125
|
-
for (const key in appPkg[scope]) {
|
|
126
|
-
if (Object.hasOwnProperty.call(appPkg[scope], key)) {
|
|
127
|
-
if (deleteRe.test(key)) {
|
|
128
|
-
pkgs.push(key);
|
|
129
|
-
delete appPkg[scope][key];
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
spinner.clear();
|
|
135
|
-
console.log(`删除的pkgs
|
|
136
|
-
${chalk.green(JSON.stringify(deletePkgs, null, 2))}
|
|
137
|
-
`);
|
|
138
|
-
appPkg.devDependencies["@qse/edu-scripts"] = "^" + pkg.version;
|
|
139
|
-
});
|
|
140
|
-
await fs.writeFile(paths.package, JSON.stringify(appPkg, null, 2), "utf-8");
|
|
141
|
-
open(`${pkg.homepage}#/refactor`);
|
|
142
|
-
console.log(
|
|
143
|
-
chalk.green(`
|
|
144
|
-
改造还未完成,剩余步骤请查看文档
|
|
145
|
-
${pkg.homepage}#/refactor
|
|
146
|
-
|
|
147
|
-
运行 npm i 安装依赖
|
|
148
|
-
运行 edu-scripts start 启动服务
|
|
149
|
-
`)
|
|
150
|
-
);
|
|
151
|
-
};
|
package/lib/build.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
// src/build.js
|
|
2
|
-
process.env.NODE_ENV = "production";
|
|
3
|
-
process.env.BABEL_ENV = "production";
|
|
4
|
-
process.env.BROWSERSLIST = ">0.2%, iOS>=9, ie 11, chrome>=49, not op_mini all";
|
|
5
|
-
var webpack = require("webpack");
|
|
6
|
-
var chalk = require("chalk");
|
|
7
|
-
var getConfig = require("./utils/getConfig");
|
|
8
|
-
var {
|
|
9
|
-
measureFileSizesBeforeBuild,
|
|
10
|
-
printFileSizesAfterBuild
|
|
11
|
-
} = require("./utils/FileSizeReporter");
|
|
12
|
-
var paths = require("./config/paths");
|
|
13
|
-
var fs = require("fs-extra");
|
|
14
|
-
var appConfig = require("./utils/appConfig");
|
|
15
|
-
var WARN_AFTER_BUNDLE_GZIP_SIZE = appConfig.single ? 1024 * 1024 : 30 * 1024;
|
|
16
|
-
var WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024;
|
|
17
|
-
module.exports = async function build(args) {
|
|
18
|
-
if (args.analyze) {
|
|
19
|
-
process.env.ANALYZE = "1";
|
|
20
|
-
}
|
|
21
|
-
if (args.outputHtml) {
|
|
22
|
-
process.env.OUTPUT_HTML = "1";
|
|
23
|
-
}
|
|
24
|
-
const previousSizeMap = await measureFileSizesBeforeBuild(paths.dist);
|
|
25
|
-
fs.emptyDirSync(paths.dist);
|
|
26
|
-
if (appConfig.single) {
|
|
27
|
-
fs.copySync(paths.public, paths.resolveApp("dist"));
|
|
28
|
-
}
|
|
29
|
-
if (appConfig.mainProject && fs.existsSync(paths.static)) {
|
|
30
|
-
fs.copySync(paths.static, paths.resolveApp("dist", "static"));
|
|
31
|
-
}
|
|
32
|
-
webpack(getConfig(args), (error, stats) => {
|
|
33
|
-
if (error) {
|
|
34
|
-
console.log(chalk.red("编译失败"));
|
|
35
|
-
console.log(chalk.red(error.message || error));
|
|
36
|
-
console.log();
|
|
37
|
-
process.exit(1);
|
|
38
|
-
}
|
|
39
|
-
if (stats.compilation.errors.length) {
|
|
40
|
-
console.log(chalk.red("编译失败"));
|
|
41
|
-
console.log(stats.toString({ all: false, errors: true, colors: true }));
|
|
42
|
-
process.exit(1);
|
|
43
|
-
}
|
|
44
|
-
console.log(stats.toString({ colors: true, preset: "errors-warnings", timings: true }));
|
|
45
|
-
printFileSizesAfterBuild(
|
|
46
|
-
stats,
|
|
47
|
-
previousSizeMap,
|
|
48
|
-
paths.dist,
|
|
49
|
-
WARN_AFTER_BUNDLE_GZIP_SIZE,
|
|
50
|
-
WARN_AFTER_CHUNK_GZIP_SIZE
|
|
51
|
-
);
|
|
52
|
-
if (appConfig.single) {
|
|
53
|
-
console.log(`打包完成,可以使用 ${chalk.green("@qse/ssh-sftp")} 自动部署代码到 v1`);
|
|
54
|
-
} else {
|
|
55
|
-
console.log(`打包完成,可以运行 ${chalk.green("npx edu-scripts deploy")} 部署代码到 v1`);
|
|
56
|
-
}
|
|
57
|
-
console.log();
|
|
58
|
-
});
|
|
59
|
-
};
|
package/lib/cli.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// src/cli.js
|
|
4
|
-
var pkg = require("../package.json");
|
|
5
|
-
require("./utils/beforeStart");
|
|
6
|
-
require("yargs").usage(`教育工程化 webpack5 基础框架
|
|
7
|
-
文档: ${pkg.homepage}`).command(
|
|
8
|
-
"start",
|
|
9
|
-
"开发",
|
|
10
|
-
(yargs) => yargs.option("port", { alias: "p", desc: "指定端口" }).option("open", { desc: "启动后打开页面" }),
|
|
11
|
-
(args) => require("./start")(args)
|
|
12
|
-
).command(
|
|
13
|
-
"build",
|
|
14
|
-
"打包",
|
|
15
|
-
(yargs) => yargs.option("analyze", {
|
|
16
|
-
alias: "a",
|
|
17
|
-
desc: "分析代码",
|
|
18
|
-
default: false,
|
|
19
|
-
boolean: true
|
|
20
|
-
}).option("output-html", {
|
|
21
|
-
alias: "o",
|
|
22
|
-
desc: "输出 html 文件",
|
|
23
|
-
default: false,
|
|
24
|
-
boolean: true
|
|
25
|
-
}),
|
|
26
|
-
(args) => require("./build")(args)
|
|
27
|
-
).command(
|
|
28
|
-
"deploy",
|
|
29
|
-
"自动部署 dist 到 v1 服务器",
|
|
30
|
-
(yargs) => yargs.option("school", { alias: "s", desc: "上传到校端", default: false, boolean: true }).option("bureau", { alias: "b", desc: "上传到局端", default: false, boolean: true }).option("documentshelves", {
|
|
31
|
-
alias: "d",
|
|
32
|
-
desc: "上传到公文",
|
|
33
|
-
default: false,
|
|
34
|
-
boolean: true
|
|
35
|
-
}).option("compositionshelves", {
|
|
36
|
-
alias: "c",
|
|
37
|
-
desc: "上传到文曲智阅",
|
|
38
|
-
default: false,
|
|
39
|
-
boolean: true
|
|
40
|
-
}).option("compositionshelves-dingtalk", {
|
|
41
|
-
alias: "cd",
|
|
42
|
-
desc: "上传到文曲智阅(钉钉一方化)",
|
|
43
|
-
default: false,
|
|
44
|
-
boolean: true
|
|
45
|
-
}),
|
|
46
|
-
(args) => require("./deploy")(args)
|
|
47
|
-
).command(
|
|
48
|
-
["generator", "g"],
|
|
49
|
-
"自动生成代码",
|
|
50
|
-
(yargs) => yargs.command(
|
|
51
|
-
"override",
|
|
52
|
-
"创建 override 文件",
|
|
53
|
-
{},
|
|
54
|
-
(args) => require("./generator").override(args)
|
|
55
|
-
).command(
|
|
56
|
-
"tailwind",
|
|
57
|
-
"创建 tailwind 文件",
|
|
58
|
-
{},
|
|
59
|
-
(args) => require("./generator").tailwind(args)
|
|
60
|
-
).command("ts", "创建 tsconfig 文件", {}, (args) => require("./generator").ts(args)).showHelpOnFail(true).demandCommand(1, "")
|
|
61
|
-
).command("auto-refactor", "自动改造项目", {}, () => require("./auto-refactor")()).command(
|
|
62
|
-
"commit-dist",
|
|
63
|
-
"提交 dist 目录到 dist 分支",
|
|
64
|
-
(yargs) => yargs.option("rm-local", { desc: "提交完后删除本地 dist", type: "boolean" }),
|
|
65
|
-
(args) => require("./commit-dist")(args)
|
|
66
|
-
).showHelpOnFail(true).demandCommand(1, "").alias({ v: "version", h: "help" }).argv;
|
package/lib/commit-dist.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
// src/commit-dist.js
|
|
2
|
-
var chalk = require("chalk");
|
|
3
|
-
var paths = require("./config/paths");
|
|
4
|
-
var fs = require("fs-extra");
|
|
5
|
-
var exec = (cmd, opts) => require("child_process").execSync(cmd, { encoding: "utf-8", stdio: "pipe", ...opts });
|
|
6
|
-
var tmp = require("tmp");
|
|
7
|
-
function validateSVNRoot(root) {
|
|
8
|
-
const ls = exec(`svn ls ${root}`);
|
|
9
|
-
return ["trunk", "branches"].every((s) => ls.includes(s));
|
|
10
|
-
}
|
|
11
|
-
function getWorkingCopyInfo() {
|
|
12
|
-
exec(`svn up`);
|
|
13
|
-
const url = exec(`svn info --show-item url`).trim();
|
|
14
|
-
const revision = exec(`svn info --show-item last-changed-revision`).trim();
|
|
15
|
-
const author = exec(`svn info --show-item last-changed-author`).trim();
|
|
16
|
-
let branch = "trunk";
|
|
17
|
-
let root = url.replace(/\/trunk$/, "");
|
|
18
|
-
if (url.includes("/branches/")) {
|
|
19
|
-
branch = url.split("/").pop();
|
|
20
|
-
root = url.replace(/\/branches\/[^/]+$/, "");
|
|
21
|
-
}
|
|
22
|
-
let distBranchURL = root + "/branches/dist";
|
|
23
|
-
let distBranchDirURL = distBranchURL + "/" + branch;
|
|
24
|
-
if (!validateSVNRoot(root)) {
|
|
25
|
-
console.log(chalk.red("SVN目录不符合规则,必须包含 trunk branches"));
|
|
26
|
-
process.exit(1);
|
|
27
|
-
}
|
|
28
|
-
return { url, branch, revision, author, distBranchURL, distBranchDirURL, root };
|
|
29
|
-
}
|
|
30
|
-
function copyDistToRepo(info) {
|
|
31
|
-
const tmpdir = tmp.dirSync().name;
|
|
32
|
-
try {
|
|
33
|
-
exec(`svn ls ${info.distBranchDirURL} --depth empty`);
|
|
34
|
-
} catch (error) {
|
|
35
|
-
if (error.message.includes("non-existent")) {
|
|
36
|
-
exec(
|
|
37
|
-
`svn mkdir ${info.distBranchDirURL} --parents -m "[edu-scripts] create ${info.branch} dist"`
|
|
38
|
-
);
|
|
39
|
-
} else {
|
|
40
|
-
throw error;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
exec(`svn co ${info.distBranchDirURL} ${tmpdir}`);
|
|
44
|
-
try {
|
|
45
|
-
exec(`svn rm * --force -q`, { cwd: tmpdir });
|
|
46
|
-
} catch (error) {
|
|
47
|
-
}
|
|
48
|
-
fs.copySync(paths.dist, tmpdir);
|
|
49
|
-
exec(`svn add * --force --auto-props --parents --depth infinity -q`, { cwd: tmpdir });
|
|
50
|
-
const msg = `[edu-scripts] commit ${info.branch} dist #${info.revision} @${info.author}`;
|
|
51
|
-
exec(`svn ci -m "${msg}"`, { cwd: tmpdir });
|
|
52
|
-
fs.removeSync(tmpdir);
|
|
53
|
-
}
|
|
54
|
-
module.exports = async function commitDist(args) {
|
|
55
|
-
if (!fs.existsSync(paths.dist)) {
|
|
56
|
-
console.log(chalk.red("未找到 dist 文件夹,请先 edu-scpirts build"));
|
|
57
|
-
process.exit(1);
|
|
58
|
-
}
|
|
59
|
-
if (exec("svn st").trim().length) {
|
|
60
|
-
console.log(chalk.red("似乎存在未提交的代码,请提交后重试。运行 svn st 查看具体信息"));
|
|
61
|
-
process.exit(1);
|
|
62
|
-
}
|
|
63
|
-
const info = getWorkingCopyInfo();
|
|
64
|
-
console.log(
|
|
65
|
-
chalk.green(
|
|
66
|
-
[
|
|
67
|
-
`分支: ${info.branch}`,
|
|
68
|
-
`版本: ${info.revision}`,
|
|
69
|
-
`作者: ${info.author}`,
|
|
70
|
-
`地址: ${info.distBranchDirURL}`
|
|
71
|
-
].join("\n")
|
|
72
|
-
)
|
|
73
|
-
);
|
|
74
|
-
copyDistToRepo(info);
|
|
75
|
-
if (args.rmLocal) {
|
|
76
|
-
fs.removeSync(paths.dist);
|
|
77
|
-
}
|
|
78
|
-
console.log(chalk.green("提交完成"));
|
|
79
|
-
};
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __copyProps = (to, from, except, desc) => {
|
|
8
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
-
for (let key of __getOwnPropNames(from))
|
|
10
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
-
}
|
|
13
|
-
return to;
|
|
14
|
-
};
|
|
15
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
-
mod
|
|
22
|
-
));
|
|
23
|
-
|
|
24
|
-
// src/config/babel.dependencies.js
|
|
25
|
-
var getOverride = require("../utils/getOverride");
|
|
26
|
-
module.exports = function getBabelConfig(opts = {}) {
|
|
27
|
-
const isDev = process.env.NODE_ENV === "development";
|
|
28
|
-
let config = {
|
|
29
|
-
cacheDirectory: true,
|
|
30
|
-
cacheCompression: false,
|
|
31
|
-
babelrc: false,
|
|
32
|
-
configFile: false,
|
|
33
|
-
sourceType: "unambiguous",
|
|
34
|
-
compact: false,
|
|
35
|
-
sourceMaps: isDev,
|
|
36
|
-
inputSourceMap: isDev,
|
|
37
|
-
presets: [
|
|
38
|
-
[
|
|
39
|
-
require.resolve("@babel/preset-env"),
|
|
40
|
-
{
|
|
41
|
-
modules: opts.modules,
|
|
42
|
-
useBuiltIns: "entry",
|
|
43
|
-
corejs: 3,
|
|
44
|
-
// Exclude transforms that make all code slower
|
|
45
|
-
exclude: ["transform-typeof-symbol"]
|
|
46
|
-
}
|
|
47
|
-
]
|
|
48
|
-
].filter(Boolean),
|
|
49
|
-
plugins: [
|
|
50
|
-
[
|
|
51
|
-
require.resolve("@babel/plugin-transform-runtime"),
|
|
52
|
-
{
|
|
53
|
-
absoluteRuntime: true,
|
|
54
|
-
corejs: false,
|
|
55
|
-
helpers: true,
|
|
56
|
-
// By default, babel assumes babel/runtime version 7.0.0-beta.0,
|
|
57
|
-
// explicitly resolving to match the provided helper functions.
|
|
58
|
-
// https://github.com/babel/babel/issues/10261
|
|
59
|
-
version: require("@babel/runtime/package.json").version,
|
|
60
|
-
regenerator: true
|
|
61
|
-
// // https://babeljs.io/docs/en/babel-plugin-transform-runtime#useesmodules
|
|
62
|
-
// // We should turn this on once the lowest version of Node LTS
|
|
63
|
-
// // supports ES Modules.
|
|
64
|
-
// useESModules: true,
|
|
65
|
-
}
|
|
66
|
-
],
|
|
67
|
-
[
|
|
68
|
-
require.resolve("babel-plugin-import"),
|
|
69
|
-
{ libraryName: "lodash", libraryDirectory: "", camel2DashComponentName: false },
|
|
70
|
-
"lodash"
|
|
71
|
-
]
|
|
72
|
-
].filter(Boolean)
|
|
73
|
-
};
|
|
74
|
-
const override = getOverride();
|
|
75
|
-
if (override.babel) {
|
|
76
|
-
config = override.babel(config, "node_modules") || config;
|
|
77
|
-
}
|
|
78
|
-
return config;
|
|
79
|
-
};
|
package/lib/config/babel.js
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __copyProps = (to, from, except, desc) => {
|
|
8
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
-
for (let key of __getOwnPropNames(from))
|
|
10
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
-
}
|
|
13
|
-
return to;
|
|
14
|
-
};
|
|
15
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
-
mod
|
|
22
|
-
));
|
|
23
|
-
|
|
24
|
-
// src/config/babel.js
|
|
25
|
-
var fs = require("fs");
|
|
26
|
-
var paths = require("./paths");
|
|
27
|
-
var appConfig = require("../utils/appConfig");
|
|
28
|
-
var getOverride = require("../utils/getOverride");
|
|
29
|
-
var addWebpackChunkName = require("./plugins/babel-plugin-add-webpack-chunk-name");
|
|
30
|
-
var hasJsxRuntime = (() => {
|
|
31
|
-
try {
|
|
32
|
-
require.resolve("react/jsx-runtime");
|
|
33
|
-
return appConfig.single;
|
|
34
|
-
} catch (error) {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
})();
|
|
38
|
-
module.exports = function getBabelConfig(opts = {}) {
|
|
39
|
-
const isTypeScriptEnabled = fs.existsSync(paths.tsconfig);
|
|
40
|
-
const isDev = process.env.NODE_ENV === "development";
|
|
41
|
-
let config = {
|
|
42
|
-
cacheDirectory: true,
|
|
43
|
-
cacheCompression: false,
|
|
44
|
-
compact: !isDev,
|
|
45
|
-
babelrc: false,
|
|
46
|
-
configFile: false,
|
|
47
|
-
presets: [
|
|
48
|
-
[
|
|
49
|
-
require.resolve("@babel/preset-env"),
|
|
50
|
-
{
|
|
51
|
-
modules: opts.modules,
|
|
52
|
-
useBuiltIns: "entry",
|
|
53
|
-
corejs: 3,
|
|
54
|
-
// Exclude transforms that make all code slower
|
|
55
|
-
exclude: ["transform-typeof-symbol"]
|
|
56
|
-
}
|
|
57
|
-
],
|
|
58
|
-
[
|
|
59
|
-
require.resolve("@babel/preset-react"),
|
|
60
|
-
{
|
|
61
|
-
development: isDev,
|
|
62
|
-
runtime: hasJsxRuntime ? "automatic" : "classic",
|
|
63
|
-
useBuiltIns: !hasJsxRuntime
|
|
64
|
-
}
|
|
65
|
-
],
|
|
66
|
-
isTypeScriptEnabled && require.resolve("@babel/preset-typescript")
|
|
67
|
-
].filter(Boolean),
|
|
68
|
-
plugins: [
|
|
69
|
-
[
|
|
70
|
-
require.resolve("@babel/plugin-transform-runtime"),
|
|
71
|
-
{
|
|
72
|
-
absoluteRuntime: true,
|
|
73
|
-
corejs: false,
|
|
74
|
-
helpers: true,
|
|
75
|
-
// By default, babel assumes babel/runtime version 7.0.0-beta.0,
|
|
76
|
-
// explicitly resolving to match the provided helper functions.
|
|
77
|
-
// https://github.com/babel/babel/issues/10261
|
|
78
|
-
version: require("@babel/runtime/package.json").version,
|
|
79
|
-
regenerator: true
|
|
80
|
-
// // https://babeljs.io/docs/en/babel-plugin-transform-runtime#useesmodules
|
|
81
|
-
// // We should turn this on once the lowest version of Node LTS
|
|
82
|
-
// // supports ES Modules.
|
|
83
|
-
// useESModules: true,
|
|
84
|
-
}
|
|
85
|
-
],
|
|
86
|
-
[
|
|
87
|
-
require.resolve("babel-plugin-import"),
|
|
88
|
-
{ libraryName: "lodash", libraryDirectory: "", camel2DashComponentName: false },
|
|
89
|
-
"lodash"
|
|
90
|
-
],
|
|
91
|
-
isDev && require.resolve("react-refresh/babel"),
|
|
92
|
-
addWebpackChunkName
|
|
93
|
-
].filter(Boolean)
|
|
94
|
-
};
|
|
95
|
-
const override = getOverride();
|
|
96
|
-
if (override.decorators) {
|
|
97
|
-
config.presets[0][1].include = ["@babel/plugin-transform-class-properties"];
|
|
98
|
-
config.plugins.push([
|
|
99
|
-
require.resolve("@babel/plugin-proposal-decorators"),
|
|
100
|
-
{ version: "legacy" }
|
|
101
|
-
]);
|
|
102
|
-
}
|
|
103
|
-
if (override.babel) {
|
|
104
|
-
config = override.babel(config, "src") || config;
|
|
105
|
-
}
|
|
106
|
-
return config;
|
|
107
|
-
};
|
package/lib/config/paths.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
// src/config/paths.js
|
|
2
|
-
var path = require("path");
|
|
3
|
-
var fs = require("fs");
|
|
4
|
-
var glob = require("globby");
|
|
5
|
-
function resolveApp(...filePath) {
|
|
6
|
-
return path.resolve(process.cwd(), ...filePath);
|
|
7
|
-
}
|
|
8
|
-
function getExistPath(...paths2) {
|
|
9
|
-
for (const path2 of paths2) {
|
|
10
|
-
if (fs.existsSync(path2)) {
|
|
11
|
-
return path2;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return paths2[0];
|
|
15
|
-
}
|
|
16
|
-
var paths = {
|
|
17
|
-
resolveApp,
|
|
18
|
-
eduAppEnv: resolveApp("src", "edu-app-env.d.ts"),
|
|
19
|
-
dist: resolveApp("dist"),
|
|
20
|
-
sshSftp: resolveApp(".sftprc.json"),
|
|
21
|
-
nodeModules: resolveApp("node_modules"),
|
|
22
|
-
tsconfig: resolveApp("tsconfig.json"),
|
|
23
|
-
jsconfig: resolveApp("jsconfig.json"),
|
|
24
|
-
package: resolveApp("package.json"),
|
|
25
|
-
tailwind: resolveApp("tailwind.config.js"),
|
|
26
|
-
indexJS: resolveApp("src", "index.js"),
|
|
27
|
-
pages: resolveApp("src", "pages"),
|
|
28
|
-
override: resolveApp("edu-scripts.override.js"),
|
|
29
|
-
indexHTML: glob.sync("./public/*.html", { absolute: true }),
|
|
30
|
-
src: resolveApp("src"),
|
|
31
|
-
public: resolveApp("public"),
|
|
32
|
-
static: resolveApp("public", "static"),
|
|
33
|
-
theme: getExistPath(resolveApp("theme.json"), resolveApp("theme.js")),
|
|
34
|
-
mock: resolveApp("mock")
|
|
35
|
-
};
|
|
36
|
-
module.exports = paths;
|