1
0
Fork 0
mirror of synced 2024-06-29 19:41:03 +12:00
budibase/scripts/build.js

100 lines
2.4 KiB
JavaScript
Raw Normal View History

2023-04-25 05:24:09 +12:00
#!/usr/bin/node
2023-03-03 04:34:52 +13:00
const start = Date.now()
2023-03-03 05:03:56 +13:00
const glob = require("glob")
const fs = require("fs")
const path = require("path")
2023-03-03 05:03:56 +13:00
2023-03-03 04:34:52 +13:00
const { build } = require("esbuild")
2023-05-25 21:49:38 +12:00
const {
default: TsconfigPathsPlugin,
} = require("@esbuild-plugins/tsconfig-paths")
2023-06-17 01:26:34 +12:00
const { nodeExternalsPlugin } = require("esbuild-node-externals")
2023-03-03 04:34:52 +13:00
2023-05-03 23:38:23 +12:00
var argv = require("minimist")(process.argv.slice(2))
2023-09-06 11:45:59 +12:00
function runBuild(
entry,
outfile,
opts = { skipMeta: false, bundle: true, silent: false }
) {
2023-05-03 23:38:23 +12:00
const isDev = process.env.NODE_ENV !== "production"
2023-05-04 01:04:54 +12:00
const tsconfig = argv["p"] || `tsconfig.build.json`
const tsconfigPathPluginContent = JSON.parse(
fs.readFileSync(tsconfig, "utf-8")
)
2023-08-10 20:48:18 +12:00
if (
!fs.existsSync("../pro/src") &&
tsconfigPathPluginContent.compilerOptions?.paths
) {
2023-07-26 22:01:05 +12:00
// If we don't have pro, we cannot bundle backend-core.
// Otherwise, the main context will not be shared between libraries
2023-08-15 04:44:24 +12:00
delete tsconfigPathPluginContent?.compilerOptions?.paths?.[
"@budibase/backend-core"
]
2023-08-15 04:44:24 +12:00
delete tsconfigPathPluginContent?.compilerOptions?.paths?.[
"@budibase/backend-core/*"
]
}
2023-05-04 01:04:54 +12:00
2023-09-06 02:44:02 +12:00
const metafile = !opts.skipMeta
const { bundle } = opts
const sharedConfig = {
entryPoints: [entry],
2023-09-06 02:44:02 +12:00
bundle,
2023-05-03 23:38:23 +12:00
minify: !isDev,
2023-05-04 04:15:57 +12:00
sourcemap: isDev,
2023-05-04 01:04:54 +12:00
tsconfig,
2023-09-06 02:44:02 +12:00
format: opts?.forcedFormat,
plugins: [
TsconfigPathsPlugin({ tsconfig: tsconfigPathPluginContent }),
nodeExternalsPlugin(),
],
preserveSymlinks: true,
2023-05-04 04:15:57 +12:00
loader: {
".svelte": "copy",
},
2023-09-06 02:44:02 +12:00
metafile,
external: bundle
? ["deasync", "mock-aws-s3", "nock", "pino", "koa-pino-logger", "bull"]
: undefined,
}
build({
...sharedConfig,
platform: "node",
2023-05-04 01:04:54 +12:00
outfile,
2023-06-17 01:16:32 +12:00
}).then(result => {
glob(`${process.cwd()}/src/**/*.hbs`, {}, (err, files) => {
for (const file of files) {
fs.copyFileSync(file, `${process.cwd()}/dist/${path.basename(file)}`)
}
2023-09-06 11:45:59 +12:00
!opts.silent &&
console.log(
"\x1b[32m%s\x1b[0m",
`Build successfully in ${(Date.now() - start) / 1000} seconds`
)
})
2023-06-17 01:16:32 +12:00
2023-09-06 02:44:02 +12:00
if (metafile) {
fs.writeFileSync(
`dist/${path.basename(outfile)}.meta.json`,
JSON.stringify(result.metafile)
)
}
})
2023-03-03 04:34:52 +13:00
}
if (require.main === module) {
2023-05-03 23:38:23 +12:00
const entry = argv["e"] || "./src/index.ts"
2023-05-04 02:45:29 +12:00
const outfile = `dist/${entry.split("/").pop().replace(".ts", ".js")}`
runBuild(entry, outfile)
} else {
module.exports = runBuild
}