/
build.js
92 lines (79 loc) · 3 KB
/
build.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const ncc = require("../src/index.js");
const { statSync, writeFileSync } = require("fs");
const { promisify } = require("util");
const { relative } = require("path");
const copy = promisify(require("copy"));
const glob = promisify(require("glob"));
const bytes = require("bytes");
async function main() {
const { code: cli, assets: cliAssets } = await ncc(
__dirname + "/../src/cli",
{
externals: ["./index.js"]
}
);
const { code: index, assets: indexAssets } = await ncc(
__dirname + "/../src/index",
{
// we dont care about watching, so we don't want
// to bundle it. even if we did want watching and a bigger
// bundle, webpack (and therefore ncc) cannot currently bundle
// chokidar, which is quite convenient
externals: ["chokidar"]
}
);
const { code: nodeLoader, assets: nodeLoaderAssets } = await ncc(
__dirname + "/../src/loaders/node-loader"
);
const { code: relocateLoader, assets: relocateLoaderAssets } = await ncc(
__dirname + "/../src/loaders/relocate-loader"
);
const { code: shebangLoader, assets: shebangLoaderAssets } = await ncc(
__dirname + "/../src/loaders/shebang-loader"
);
const { code: tsLoader, assets: tsLoaderAssets } = await ncc(
__dirname + "/../src/loaders/ts-loader"
);
const { code: sourcemapSupport, assets: sourcemapAssets } = await ncc(
require.resolve("source-map-support/register")
);
// detect unexpected asset emissions from core build
if (
Object.keys(cliAssets).length ||
Object.keys(indexAssets).some(asset => !asset.startsWith('locales/')) ||
Object.keys(nodeLoaderAssets).length ||
Object.keys(relocateLoaderAssets).length ||
Object.keys(shebangLoaderAssets).length ||
Object.keys(tsLoaderAssets).some(asset => !asset.startsWith('lib/')) ||
Object.keys(sourcemapAssets).length
) {
console.error("New assets are being emitted by the core build");
}
writeFileSync(__dirname + "/../dist/ncc/cli.js", cli);
writeFileSync(__dirname + "/../dist/ncc/index.js", index);
writeFileSync(__dirname + "/../dist/ncc/sourcemap-register.js", sourcemapSupport);
writeFileSync(__dirname + "/../dist/ncc/loaders/node-loader.js", nodeLoader);
writeFileSync(__dirname + "/../dist/ncc/loaders/relocate-loader.js", relocateLoader);
writeFileSync(__dirname + "/../dist/ncc/loaders/shebang-loader.js", shebangLoader);
writeFileSync(__dirname + "/../dist/ncc/loaders/ts-loader.js", tsLoader);
// copy typescript types
await copy(
__dirname + "/../node_modules/typescript/lib/*.ts",
__dirname + "/../dist/ncc/loaders/lib/"
);
// copy webpack buildin
await copy(
__dirname + "/../node_modules/webpack/buildin/*.js",
__dirname + "/../dist/ncc/buildin/"
);
for (const file of await glob(__dirname + "/../dist/**/*.js")) {
console.log(
`✓ ${relative(__dirname + "/../", file)} (${bytes(statSync(file).size)})`
);
}
}
// remove me when node.js makes this the default behavior
process.on("unhandledRejection", e => {
throw e;
});
main();