Skip to content

Commit 09e0374

Browse files
authored
Fix cpy and esm support (#49)
* bump all packages and fix esm support * 1.8.9 * update readme
1 parent 8ed7141 commit 09e0374

File tree

6 files changed

+219
-207
lines changed

6 files changed

+219
-207
lines changed

README.md

+22
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ By default esbuild-node-tsc should work out of the box for your project since it
106106

107107
But if things are not working as expected you can configure esbuild-node-tsc by adding `etsc.config.js` along side tsconfig.json.
108108

109+
> You might need to install `esbuild-plugin-tsc` package too to use the esbuild tsc plugin
110+
109111
Example `etsc.config.js`
110112

111113
```js
@@ -126,6 +128,26 @@ module.exports = {
126128
};
127129
```
128130

131+
or if you use ESM in your project then use
132+
133+
```js
134+
import esbuildPluginTsc from "esbuild-plugin-tsc";
135+
136+
export default {
137+
outDir: "./dist",
138+
esbuild: {
139+
minify: false,
140+
target: "es2015",
141+
plugins: [esbuildPluginTsc()],
142+
},
143+
assets: {
144+
baseDir: "src",
145+
outDir: "./dist",
146+
filePatterns: ["**/*.json"],
147+
},
148+
};
149+
```
150+
129151
All of the above fields are optional.
130152

131153
If you want to use different config files for different types of builds you can do so using the param `--config`. Example:

package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "esbuild-node-tsc",
33
"description": "Build your Typescript Node.js projects using blazing fast esbuild",
4-
"version": "1.8.8",
4+
"version": "1.8.9",
55
"main": "./dist/index.js",
66
"bin": {
77
"esbuild-node-tsc": "dist/index.js",
@@ -23,10 +23,10 @@
2323
"typescript"
2424
],
2525
"devDependencies": {
26-
"@types/node": "^18.6.3",
26+
"@types/node": "^18.7.3",
2727
"@types/rimraf": "^3.0.2",
28-
"@types/yargs": "^17.0.10",
29-
"esbuild": "^0.14.53",
28+
"@types/yargs": "^17.0.11",
29+
"esbuild": "^0.15.2",
3030
"typescript": "^4.7.4"
3131
},
3232
"dependencies": {

src/config.ts

+6-12
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
1-
import fs from 'fs'
2-
import type { Plugin } from "esbuild";
1+
import fs from "fs";
2+
import type { BuildOptions as EsBuildOptions, Plugin } from "esbuild";
33

44
export type Config = Partial<{
55
outDir: string;
66
clean?: boolean;
77
tsConfigFile?: string;
8-
esbuild: {
9-
entryPoints?: string[];
10-
minify?: boolean;
11-
target?: string;
12-
plugins?: Plugin[];
13-
format?: "cjs" | "esm";
14-
};
8+
esbuild: EsBuildOptions;
159
assets: {
1610
baseDir?: string;
1711
outDir?: string;
@@ -22,9 +16,9 @@ export type Config = Partial<{
2216
export async function readUserConfig(configPath: string): Promise<Config> {
2317
if (fs.existsSync(configPath)) {
2418
try {
25-
return require(configPath);
26-
}
27-
catch (e) {
19+
const { default: config } = await import(configPath);
20+
return config;
21+
} catch (e) {
2822
console.log("Config file has some errors:");
2923
console.error(e);
3024
}

src/index.ts

+25-24
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env node
22

3-
import ts, { BuildOptions } from "typescript";
4-
import { build } from "esbuild";
3+
import ts from "typescript";
4+
import { build, BuildOptions as EsBuildOptions } from "esbuild";
55
import cpy from "cpy";
66
import path from "path";
77
import rimraf from "rimraf";
@@ -58,27 +58,30 @@ function esBuildSourceMapOptions(tsConfig: TSConfig) {
5858

5959
function getBuildMetadata(userConfig: Config) {
6060
const { tsConfig, tsConfigFile } = getTSConfig(userConfig.tsConfigFile);
61-
62-
const outDir = userConfig.outDir || tsConfig.options.outDir || "dist";
63-
64-
const esbuildEntryPoints = userConfig.esbuild?.entryPoints || [];
65-
const srcFiles = [...tsConfig.fileNames, ...esbuildEntryPoints];
66-
const sourcemap = esBuildSourceMapOptions(tsConfig);
61+
const esbuildConfig = userConfig.esbuild || {};
62+
63+
const outDir =
64+
userConfig.outDir ||
65+
tsConfig.options.outDir ||
66+
esbuildConfig.outdir ||
67+
"dist";
68+
69+
const srcFiles = [
70+
...tsConfig.fileNames,
71+
...((esbuildConfig.entryPoints as string[]) ?? []),
72+
];
73+
const sourcemap =
74+
esBuildSourceMapOptions(tsConfig) || userConfig.esbuild?.sourcemap;
6775
const target =
68-
userConfig.esbuild?.target ||
69-
tsConfig?.raw?.compilerOptions?.target ||
70-
"es6";
71-
const minify = userConfig.esbuild?.minify || false;
72-
const plugins = userConfig.esbuild?.plugins || [];
73-
const format = userConfig.esbuild?.format || "cjs";
74-
75-
const esbuildOptions: BuildOptions = {
76+
tsConfig?.raw?.compilerOptions?.target || esbuildConfig?.target || "es2015";
77+
const format = esbuildConfig?.format || "cjs";
78+
79+
const esbuildOptions: EsBuildOptions = {
80+
...userConfig.esbuild,
7681
outdir: outDir,
7782
entryPoints: srcFiles,
7883
sourcemap,
7984
target,
80-
minify,
81-
plugins,
8285
tsconfig: tsConfigFile,
8386
format,
8487
};
@@ -88,13 +91,13 @@ function getBuildMetadata(userConfig: Config) {
8891
const assetsOptions = {
8992
baseDir: userConfig.assets?.baseDir || "src",
9093
outDir: userConfig.assets?.outDir || outDir,
91-
patterns: [...assetPatterns, `!**/*.{ts,js,tsx,jsx}`],
94+
patterns: [...assetPatterns, "!**/*.{ts,js,tsx,jsx}"],
9295
};
9396

9497
return { outDir, esbuildOptions, assetsOptions };
9598
}
9699

97-
async function buildSourceFiles(esbuildOptions: Partial<BuildOptions>) {
100+
async function buildSourceFiles(esbuildOptions: EsBuildOptions) {
98101
return await build({
99102
bundle: false,
100103
format: "cjs",
@@ -111,14 +114,12 @@ async function copyNonSourceFiles({
111114
patterns,
112115
}: AssetsOptions) {
113116
const relativeOutDir = path.relative(baseDir, outDir);
114-
return await cpy(patterns, relativeOutDir, {
115-
cwd: baseDir,
116-
});
117+
return await cpy(patterns, relativeOutDir, { cwd: baseDir });
117118
}
118119

119120
async function main() {
120121
const configFilename = <string>(await argv)?.config || "etsc.config.js";
121-
const clean = <boolean>(await argv)?.clean || false;
122+
const clean = (await argv)?.clean;
122123
const config = await readUserConfig(path.resolve(cwd, configFilename));
123124

124125
const { outDir, esbuildOptions, assetsOptions } = getBuildMetadata(config);

tsconfig.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"compilerOptions": {
3-
"target": "ESNext",
4-
"module": "ESNext",
3+
"target": "esnext",
4+
"module": "esnext",
55
"declaration": true,
66
"sourceMap": true,
77
"outDir": "./dist",

0 commit comments

Comments
 (0)