@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.
Files changed (94) hide show
  1. package/CHANGELOG.md +4 -489
  2. package/asset/rspack-dev-server-client.js +534 -0
  3. package/{src/asset → asset}/template/edu-scripts.override.js.tpl +2 -2
  4. package/{lib/asset → asset}/template/tailwind.config.js.tpl +1 -1
  5. package/babel.config.json +6 -0
  6. package/dist/cli.d.mts +1 -0
  7. package/dist/cli.mjs +1432 -0
  8. package/dist/index.d.mts +83 -0
  9. package/dist/index.mjs +13 -0
  10. package/eslint.config.mjs +3 -0
  11. package/{jest.config.js → jest.config.mjs} +8 -4
  12. package/package.json +67 -67
  13. package/pnpm-workspace.yaml +2 -0
  14. package/src/{auto-refactor.js → auto-refactor.ts} +51 -59
  15. package/src/{build.js → build.ts} +22 -16
  16. package/src/{cli.js → cli.ts} +26 -21
  17. package/src/{commit-dist.js → commit-dist.ts} +28 -21
  18. package/src/config/paths.ts +52 -0
  19. package/src/config/plugins/mock-server/{index.js → index.ts} +30 -41
  20. package/src/config/plugins/{postcss-safe-area.js → postcss-safe-area.ts} +4 -2
  21. package/src/config/{webpackConfig.js → webpackConfig.ts} +157 -126
  22. package/src/config/{webpackDevServerConfig.js → webpackDevServerConfig.ts} +18 -18
  23. package/src/{deploy.js → deploy.ts} +36 -25
  24. package/src/{generator.js → generator.ts} +5 -14
  25. package/src/start.ts +52 -0
  26. package/src/utils/FileSizeReporter.ts +166 -0
  27. package/src/utils/{appConfig.js → appConfig.ts} +5 -4
  28. package/src/utils/{beforeStart.js → beforeStart.ts} +19 -7
  29. package/src/utils/{changeDeployVersion.js → changeDeployVersion.ts} +43 -48
  30. package/src/utils/defineConfig.ts +19 -36
  31. package/src/utils/esm-register.ts +6 -0
  32. package/src/utils/{exec.js → exec.ts} +3 -3
  33. package/src/utils/{getConfig.js → getConfig.ts} +7 -5
  34. package/src/utils/getOverride.ts +32 -0
  35. package/src/utils/resolveModule.ts +3 -0
  36. package/tsconfig.json +3 -15
  37. package/tsdown.config.ts +5 -0
  38. package/docs/changelog.md +0 -5
  39. package/docs/debug.md +0 -17
  40. package/docs/deploy.md +0 -54
  41. package/docs/faq.md +0 -144
  42. package/docs/feat.md +0 -167
  43. package/docs/grayscale.md +0 -31
  44. package/docs/index.md +0 -5
  45. package/docs/mode.md +0 -42
  46. package/docs/override.md +0 -193
  47. package/docs/refactor-react-16.md +0 -37
  48. package/docs/refactor.md +0 -67
  49. package/docs/static.md +0 -24
  50. package/lib/asset/template/edu-scripts.override.js.tpl +0 -7
  51. package/lib/auto-refactor.js +0 -151
  52. package/lib/build.js +0 -59
  53. package/lib/cli.js +0 -66
  54. package/lib/commit-dist.js +0 -79
  55. package/lib/config/babel.dependencies.js +0 -79
  56. package/lib/config/babel.js +0 -107
  57. package/lib/config/paths.js +0 -36
  58. package/lib/config/plugins/babel-plugin-add-webpack-chunk-name.js +0 -31
  59. package/lib/config/plugins/mock-server/defineMock.d.ts +0 -6
  60. package/lib/config/plugins/mock-server/defineMock.js +0 -31
  61. package/lib/config/plugins/mock-server/index.js +0 -122
  62. package/lib/config/plugins/postcss-safe-area.js +0 -19
  63. package/lib/config/plugins/ws-utils-createSocketURL.js +0 -118
  64. package/lib/config/webpackConfig.js +0 -462
  65. package/lib/config/webpackDevServerConfig.js +0 -72
  66. package/lib/deploy.js +0 -143
  67. package/lib/generator.js +0 -50
  68. package/lib/index.d.ts +0 -2
  69. package/lib/index.js +0 -32
  70. package/lib/start.js +0 -36
  71. package/lib/utils/FileSizeReporter.js +0 -107
  72. package/lib/utils/appConfig.js +0 -32
  73. package/lib/utils/beforeStart.js +0 -50
  74. package/lib/utils/changeDeployVersion.js +0 -89
  75. package/lib/utils/defineConfig.d.ts +0 -93
  76. package/lib/utils/defineConfig.js +0 -31
  77. package/lib/utils/exec.js +0 -7
  78. package/lib/utils/getConfig.js +0 -20
  79. package/lib/utils/getOverride.js +0 -61
  80. package/src/asset/dll/libcommon3-manifest.json +0 -181
  81. package/src/asset/template/edu-app-env.d.ts.tpl +0 -20
  82. package/src/asset/template/tailwind.config.js.tpl +0 -11
  83. package/src/asset/template/tsconfig.json.tpl +0 -24
  84. package/src/config/babel.dependencies.js +0 -66
  85. package/src/config/babel.js +0 -94
  86. package/src/config/paths.js +0 -38
  87. package/src/config/plugins/babel-plugin-add-webpack-chunk-name.js +0 -55
  88. package/src/config/plugins/ws-utils-createSocketURL.js +0 -140
  89. package/src/start.js +0 -44
  90. package/src/utils/FileSizeReporter.js +0 -151
  91. package/src/utils/getOverride.js +0 -48
  92. /package/{lib/asset → asset}/dll/libcommon3-manifest.json +0 -0
  93. /package/{lib/asset → asset}/template/edu-app-env.d.ts.tpl +0 -0
  94. /package/{lib/asset → asset}/template/tsconfig.json.tpl +0 -0
package/src/start.js DELETED
@@ -1,44 +0,0 @@
1
- process.env.NODE_ENV = 'development'
2
- process.env.BABEL_ENV = 'development'
3
- process.env.BROWSERSLIST = 'chrome >= 70'
4
- process.env.WEBPACK_DEV_SERVER_BASE_PORT = '3000'
5
-
6
- // Makes the script crash on unhandled rejections instead of silently
7
- // ignoring them. In the future, promise rejections that are not handled will
8
- // terminate the Node.js process with a non-zero exit code.
9
- process.on('unhandledRejection', (err) => {
10
- throw err
11
- })
12
-
13
- const WebpackDevServer = require('webpack-dev-server')
14
- const webpack = require('webpack')
15
- const getConfig = require('./utils/getConfig')
16
- const chalk = require('chalk')
17
-
18
- module.exports = async function start(args) {
19
- const basePort = process.env.WEBPACK_DEV_SERVER_BASE_PORT
20
- const port = await WebpackDevServer.getFreePort(args.port || process.env.PORT)
21
- if (!(args.port || process.env.PORT) && +port !== +basePort) {
22
- console.log(chalk.bgYellow(`${basePort} 端口已被占用,现切换到 ${port} 端口运行`))
23
- }
24
- args.port = port
25
- process.env.PORT = port
26
-
27
- const compiler = webpack(getConfig(args))
28
- const devServer = new WebpackDevServer(compiler.options.devServer, compiler)
29
- devServer.start()
30
- ;[('SIGINT', 'SIGTERM')].forEach(function (sig) {
31
- process.on(sig, function () {
32
- devServer.stop()
33
- process.exit()
34
- })
35
- })
36
-
37
- if (process.env.CI !== 'true') {
38
- // Gracefully exit when stdin ends
39
- process.stdin.on('end', function () {
40
- devServer.stop()
41
- process.exit()
42
- })
43
- }
44
- }
@@ -1,151 +0,0 @@
1
- /**
2
- * Copyright (c) 2015-present, Facebook, Inc.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- var fs = require('fs')
9
- var path = require('path')
10
- var chalk = require('chalk')
11
- var filesize = require('filesize')
12
- var recursive = require('recursive-readdir')
13
- var stripAnsi = require('strip-ansi')
14
- var gzipSize = require('gzip-size').sync
15
-
16
- function canReadAsset(asset) {
17
- return (
18
- /\.(js|css)$/.test(asset) &&
19
- !/service-worker\.js/.test(asset) &&
20
- !/precache-manifest\.[0-9a-f]+\.js/.test(asset)
21
- )
22
- }
23
-
24
- // Prints a detailed summary of build files.
25
- function printFileSizesAfterBuild(
26
- webpackStats,
27
- previousSizeMap,
28
- buildFolder,
29
- maxBundleGzipSize,
30
- maxChunkGzipSize
31
- ) {
32
- var root = previousSizeMap.root
33
- var sizes = previousSizeMap.sizes
34
- var assets = (webpackStats.stats || [webpackStats])
35
- .map((stats) =>
36
- stats
37
- .toJson({ all: false, assets: true })
38
- .assets.filter((asset) => canReadAsset(asset.name))
39
- .map((asset) => {
40
- var fileContents = fs.readFileSync(path.join(root, asset.name))
41
- var size = gzipSize(fileContents)
42
- var previousSize = sizes[removeFileNameHash(root, asset.name)]
43
- var difference = getDifferenceLabel(size, previousSize)
44
- return {
45
- folder: path.join(path.basename(buildFolder), path.dirname(asset.name)),
46
- name: path.basename(asset.name),
47
- size: size,
48
- sizeLabel: filesize(size) + (difference ? ' (' + difference + ')' : ''),
49
- }
50
- })
51
- )
52
- .reduce((single, all) => all.concat(single), [])
53
-
54
- if (assets.length === 0) return
55
-
56
- console.log('\ngzip 后文件大小:\n')
57
-
58
- assets.sort((a, b) => b.size - a.size)
59
-
60
- // move main file to first
61
- var mainAssetIdx = assets.findIndex((asset) => /_\d+\.\d+\.\d+\./.test(asset.name))
62
- assets.unshift(assets.splice(mainAssetIdx, 1)[0])
63
-
64
- var longestSizeLabelLength = Math.max.apply(
65
- null,
66
- assets.map((a) => stripAnsi(a.sizeLabel).length)
67
- )
68
- var suggestBundleSplitting = false
69
- assets.forEach((asset) => {
70
- var sizeLabel = asset.sizeLabel
71
- var sizeLength = stripAnsi(sizeLabel).length
72
- if (sizeLength < longestSizeLabelLength) {
73
- var rightPadding = ' '.repeat(longestSizeLabelLength - sizeLength)
74
- sizeLabel += rightPadding
75
- }
76
- var isMainBundle = /_\d+\.\d+\.\d+\./.test(asset.name)
77
- var maxRecommendedSize = isMainBundle ? maxBundleGzipSize : maxChunkGzipSize
78
- var isLarge = maxRecommendedSize && asset.size > maxRecommendedSize
79
- if (isLarge && path.extname(asset.name) === '.js') {
80
- suggestBundleSplitting = true
81
- }
82
- console.log(
83
- ' ' +
84
- (isLarge ? chalk.yellow(sizeLabel) : sizeLabel) +
85
- ' ' +
86
- chalk.dim(asset.folder + path.sep) +
87
- chalk.cyan(asset.name)
88
- )
89
- if (isMainBundle) {
90
- console.log('')
91
- }
92
- })
93
- if (suggestBundleSplitting) {
94
- console.log()
95
- console.log(chalk.yellow('产物大小明显大于推荐的大小 (主文件 30k, chunk 1M, 黄色标注为偏大)'))
96
- console.log(chalk.yellow('考虑下使用代码分割解决'))
97
- console.log(chalk.yellow('也可以使用 npm run analyze 命令分析产物'))
98
- }
99
-
100
- console.log()
101
- }
102
-
103
- function removeFileNameHash(buildFolder, fileName) {
104
- return fileName
105
- .replace(buildFolder, '')
106
- .replace(/\\/g, '/')
107
- .replace(/\/\d+\.\d+\.\d+\//, '/')
108
- .replace(/\/?(.*)(\.[0-9a-f]+)(\.chunk)?(\.js|\.css)/, (match, p1, p2, p3, p4) => p1 + p4)
109
- }
110
-
111
- // Input: 1024, 2048
112
- // Output: "(+1 KB)"
113
- function getDifferenceLabel(currentSize, previousSize) {
114
- var FIFTY_KILOBYTES = 1024 * 50
115
- var difference = currentSize - previousSize
116
- var fileSize = !Number.isNaN(difference) ? filesize(difference) : 0
117
- if (difference >= FIFTY_KILOBYTES) {
118
- return chalk.red('+' + fileSize)
119
- } else if (difference < FIFTY_KILOBYTES && difference > 0) {
120
- return chalk.yellow('+' + fileSize)
121
- } else if (difference < 0) {
122
- return chalk.green(fileSize)
123
- } else {
124
- return ''
125
- }
126
- }
127
-
128
- function measureFileSizesBeforeBuild(buildFolder) {
129
- return new Promise((resolve) => {
130
- recursive(buildFolder, (err, fileNames) => {
131
- var sizes
132
- if (!err && fileNames) {
133
- sizes = fileNames.filter(canReadAsset).reduce((memo, fileName) => {
134
- var contents = fs.readFileSync(fileName)
135
- var key = removeFileNameHash(buildFolder, fileName)
136
- memo[key] = gzipSize(contents)
137
- return memo
138
- }, {})
139
- }
140
- resolve({
141
- root: buildFolder,
142
- sizes: sizes || {},
143
- })
144
- })
145
- })
146
- }
147
-
148
- module.exports = {
149
- measureFileSizesBeforeBuild: measureFileSizesBeforeBuild,
150
- printFileSizesAfterBuild: printFileSizesAfterBuild,
151
- }
@@ -1,48 +0,0 @@
1
- const fs = require('fs')
2
- const paths = require('../config/paths')
3
-
4
- /** @type {import('./defineConfig').Config} */
5
- const defaultOverride = {
6
- transformNodeModules: true,
7
- minifyImage: true,
8
- minify: 'esbuild',
9
- proxy: [],
10
- extraPostCSSPlugins: [],
11
- }
12
-
13
- let override = null
14
-
15
- /**
16
- * @return {import('./defineConfig').Config}
17
- */
18
- module.exports = function getOverride() {
19
- if (override) return override
20
-
21
- override = Object.assign({}, defaultOverride)
22
-
23
- if (fs.existsSync(paths.override)) {
24
- const userOverride = require(paths.override)
25
- if (typeof userOverride !== 'object')
26
- throw new Error('格式错误,请使用 npx edu g override 生成文件')
27
- Object.assign(override, userOverride)
28
- }
29
-
30
- if (override.minify === true) override.minify = defaultOverride.minify
31
-
32
- if (override.babel) {
33
- const old = override.babel
34
- override.babel = (config, context) => {
35
- const newConfig = old(config, context) || config
36
-
37
- let plugin = config.plugins.find(
38
- (plugin) => Array.isArray(plugin) && /^(babel-plugin-)?import$/.test(plugin[0])
39
- )
40
- if (plugin) {
41
- plugin[0] = require.resolve('babel-plugin-import')
42
- }
43
- return newConfig
44
- }
45
- }
46
-
47
- return override
48
- }
File without changes