Skip to content

Commit

Permalink
refactor: ♻️ 优化build逻辑
Browse files Browse the repository at this point in the history
  • Loading branch information
Plumbiu committed Aug 10, 2023
1 parent 90dc0e5 commit 340fa05
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 58 deletions.
2 changes: 1 addition & 1 deletion packages/shared/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@truth-cli/shared",
"version": "0.1.1",
"type": "module",
"main": "dist/index.js",
"main": "index.ts",
"lint-staged": {
"!(*d).{js,ts}": [
"eslint"
Expand Down
70 changes: 13 additions & 57 deletions scripts/build.ts
Original file line number Diff line number Diff line change
@@ -1,66 +1,13 @@
import path from 'node:path'
import { fileURLToPath } from 'node:url'
import process from 'node:process'
import fs from 'node:fs/promises'
import { build } from 'vite'
import type { ModuleFormat } from 'rollup'
import typescript from '@rollup/plugin-typescript'
import commonjs from '@rollup/plugin-commonjs'
import terser from '@rollup/plugin-terser'
import { nodeResolve } from '@rollup/plugin-node-resolve'
import { rollup } from 'rollup'
import minimist from 'minimist'
import { buildOptions } from './utils.js'

const argv = minimist(process.argv.slice(2))
const __dirname = fileURLToPath(new URL('.', import.meta.url))
const packagesDir = path.resolve(__dirname, '../packages/')

async function buildOptions() {
const dirs = await fs.readdir(packagesDir)
const plugins = [
nodeResolve({
preferBuiltins: true,
exportConditions: ['node'],
}),
typescript({
exclude: ['packages/web/**/*.ts', '**/__test__/**', 'node_modules/**'],
}),
commonjs(),
terser(),
]
const opts: any = {}
for (let i = 0; i < dirs.length; i++) {
if (dirs[i] !== 'web') {
opts[dirs[i]] = {
input: {
input: path.resolve(__dirname, `../packages/${dirs[i]}/index.ts`),
plugins,
},
output: {
dir: path.resolve(__dirname, `../packages/${dirs[i]}/dist`),
format: 'es' as ModuleFormat,
},
}
}
}
return opts
}

async function buildCli() {
const { cli } = await buildOptions()
const outputOptions = {
...cli.output,
banner: '#! /usr/bin/env node',
}
const bundle = await rollup(cli.input)
await bundle.write(outputOptions)
}

async function buildShared() {
const { shared } = await buildOptions()
const bundle = await rollup(shared.input)
await bundle.write(shared.output)
}

async function buildWeb(isDeploy?: boolean) {
const webBuildPath = isDeploy ? '../packages/web/dist' : '../packages/cli/dist'
Expand All @@ -79,16 +26,25 @@ async function buildWeb(isDeploy?: boolean) {
}

async function resolveBuild() {
const opts = await buildOptions()
if (argv.cli) {
await buildCli()
const [input, output] = opts.get('cli')
output.banner = '#! /usr/bin/env node'
const bundle = await rollup(input)
await bundle.write(output)
}
else if (argv.web) {
await buildWeb(argv.deploy)
}
else {
await buildShared()
await buildWeb(argv.deploy)
await buildCli()
for (const val of opts.values()) {
const [input, output] = val
if (val === 'cli')
output.banner = '#! /usr/bin/env node'
const bundle = await rollup(input)
await bundle.write(output)
}
}
}

Expand Down
42 changes: 42 additions & 0 deletions scripts/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import path from 'node:path'
import fs from 'node:fs/promises'
import { fileURLToPath } from 'node:url'
import type { ModuleFormat } from 'rollup'
import typescript from '@rollup/plugin-typescript'
import commonjs from '@rollup/plugin-commonjs'
import terser from '@rollup/plugin-terser'
import { nodeResolve } from '@rollup/plugin-node-resolve'

const __dirname = fileURLToPath(new URL('.', import.meta.url))
const packagesDir = path.resolve(__dirname, '../packages/')

export async function buildOptions() {
const dirs = await fs.readdir(packagesDir)
const plugins = [
nodeResolve({
preferBuiltins: true,
exportConditions: ['node'],
}),
typescript({
exclude: ['packages/web/**/*.ts', '**/__test__/**', 'node_modules/**'],
}),
commonjs(),
terser(),
]
const opts = new Map()
for (let i = 0; i < dirs.length; i++) {
if (dirs[i] !== 'web') {
opts.set(dirs[i], [
{
input: path.resolve(__dirname, `../packages/${dirs[i]}/index.ts`),
plugins,
},
{
dir: path.resolve(__dirname, `../packages/${dirs[i]}/dist`),
format: 'es' as ModuleFormat,
},
])
}
}
return opts
}

0 comments on commit 340fa05

Please sign in to comment.