@qse/edu-scripts 1.14.18 → 2.0.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 +2 -487
- 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 +1426 -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 +52 -58
- package/src/{auto-refactor.js → auto-refactor.ts} +51 -59
- package/src/{build.js → build.ts} +22 -16
- package/src/{cli.js → cli.ts} +25 -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} +152 -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} +18 -29
- package/src/utils/{changeDeployVersion.js → changeDeployVersion.ts} +43 -48
- package/src/utils/defineConfig.ts +19 -36
- 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 -62
- 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/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
|
-
}
|
package/src/utils/getOverride.js
DELETED
|
@@ -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
|
|
File without changes
|
|
File without changes
|