build: replace define after build

This commit is contained in:
07akioni 2021-02-03 20:20:00 +08:00
parent da0c8f78b4
commit e672f41e71
8 changed files with 66 additions and 22 deletions

View File

@ -1,17 +0,0 @@
const fs = require('fs').promises
const path = require('path')
const terseCssr = require('./utils/terse-cssr.js')
const { walk } = require('../scripts/utils')
const dirs = ['es', 'lib'].map((d) => path.resolve(__dirname, '..', d))
;(async () => {
for (const dir of dirs) {
for await (const p of walk(dir)) {
if (p.includes('.cssr.js')) {
const code = await fs.readFile(p, 'utf-8')
await fs.writeFile(p, terseCssr(code))
}
}
}
})()

View File

@ -7,10 +7,9 @@
"scripts": {
"start": "npm run dev",
"deprecated:build:icons": "npm run clean && node build/build-icons.js",
"build:js": "npm run gen-version && npm run clean && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && node build/terse-cssr.js",
"build:package": "npm run gen-version && npm run clean && node build/build-icons.js && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && node build/terse-cssr.js",
"build:site": "./build/before-build-site.sh && node build/restore-side-effects.js && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=4096 vite build && rm -rf node_modules/naive-ui && cp site/index.html site/404.html && node build/clear-side-effects.js",
"build:doc": "npm run gen-version && npm run build && rm -rf build-doc/dist && cross-env NODE_ENV=production webpack --config build/webpack.doc.js",
"build:js": "npm run gen-version && npm run clean && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && node scripts/post-build",
"build:package": "npm run gen-version && npm run clean && node build/build-icons.js && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && node scripts/post-build",
"build:site": "./scripts/pre-build-site.sh && node build/restore-side-effects.js && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=4096 vite build && rm -rf node_modules/naive-ui && cp site/index.html site/404.html && node build/clear-side-effects.js",
"clean": "rm -rf site lib es node_modules/naive-ui",
"dev": "npm run clean && npm run gen-version && cross-env NODE_ENV=development vite",
"dev:ts": "npm run clean && npm run gen-version && cross-env NODE_ENV=development TUSIMPLE=true vite",

10
scripts/post-build.js Normal file
View File

@ -0,0 +1,10 @@
// terse cssr
const { terseCssr } = require('./terse-cssr')
// replace __DEV__
const { replaceDefine } = require('./replace-define')
;(async () => {
await terseCssr()
await replaceDefine()
})()

30
scripts/replace-define.js Normal file
View File

@ -0,0 +1,30 @@
const fs = require('fs').promises
const { walk, outDirs } = require('./utils')
const alias = {
__DEV__: "process.env.NODE_ENV !== 'production'"
}
exports.replaceDefine = async () => {
const aliasKeys = Object.keys(alias)
const patterns = {}
aliasKeys.forEach((key) => {
patterns[key] = new RegExp(key, 'g')
})
for (const dir of outDirs) {
for await (const p of walk(dir)) {
const code = await fs.readFile(p, 'utf-8')
for (const key of aliasKeys) {
const pattern = patterns[key]
if (pattern.test(code)) {
const outCode = code.replace(pattern, alias[key])
await fs.writeFile(p, outCode)
}
}
}
}
}
if (require.main === module) {
exports.replaceDefine()
}

18
scripts/terse-cssr.js Normal file
View File

@ -0,0 +1,18 @@
const fs = require('fs').promises
const terseCssr = require('../build/utils/terse-cssr.js')
const { walk, outDirs } = require('./utils')
exports.terseCssr = async () => {
for (const dir of outDirs) {
for await (const p of walk(dir)) {
if (p.includes('.cssr.js')) {
const code = await fs.readFile(p, 'utf-8')
await fs.writeFile(p, terseCssr(code))
}
}
}
}
if (require.main === module) {
exports.terseCssr()
}

View File

@ -8,3 +8,5 @@ exports.walk = async function * walk (dir) {
else if (d.isFile()) yield entry
}
}
exports.outDirs = ['es', 'lib'].map((d) => path.resolve(__dirname, '..', d))

View File

@ -434,7 +434,9 @@
## Build
package: tsx => es|lib => terse cssr => release site: build package => move to node_modules => setup side effects => vite build
package: tsx => es|lib => terse cssr => replace global vars => release
site: build package => move to node_modules => setup side effects => vite build => release
## Info