Skip to content

Commit 1a8d3f0

Browse files
committed
fix: add .js extension to imports and fix package.json
This fixes two problems with the ESM build of this module. 1. The `package.json` that contains `{ "type": "module" }` wasn't being included in the npm tarball 2. When running in an ESM environment, `import foo from './bar'` does not work, you have to specify the extension The fix for the first is simple, add the cjs/esm `package.json` files to the `files` array in the project `package.json`. The second fix is harder. If you just add the `.js` extension to the source files, typescript is happy but ts-node is not, and this project uses ts-node to run the tests without a compile step. Typescript does not support importing `*.ts` and will not support adding `*.js` to the transpiled output - microsoft/TypeScript#16577 ts-node thought this was a bug in Typescript but it turns out not. Their suggestion to use `ts-node/esm` breaks sourcemap support because `source-map-support/register` is not esm - TypeStrong/ts-node#783 There is a PR against ts-node to add support for resolving `./foo.js` if `./foo.ts` or `./foo` fails but it seems to have stalled - TypeStrong/ts-node#1361 Given all of the above, the most expedient way forward seemed to just be to add a shell script that rewrites the various `import` statements in the esm output to add the `.js` extension, then if the ts-node PR ever gets merged the script can be backed out. Fixes beaugunderson#147
1 parent b1df15f commit 1a8d3f0

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

.fix-esm-imports.sh

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/sh
2+
3+
# Search for "from './baz'" and transform to "from './baz.js'"
4+
find dist/esm -type f -name *.js -exec sed -i -e -E "s/from '(\.\/.*)'/from '\1.js'/g" {} \;

package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
},
2222
"scripts": {
2323
"docs": "documentation build --github --output docs --format html ./ip-address.js",
24-
"build": "rm -rf dist/* && tsc -p tsconfig.json && tsc -p tsconfig-esm.json && ./.fix-package-types.sh",
24+
"build": "rm -rf dist/* && tsc -p tsconfig.json && tsc -p tsconfig-esm.json && ./.fix-package-types.sh && ./.fix-esm-imports.sh",
2525
"prepublishOnly": "npm run build",
2626
"release": "release-it",
2727
"test-ci": "nyc mocha",
@@ -53,7 +53,8 @@
5353
"files": [
5454
"dist/**/*.js",
5555
"dist/**/*.ts",
56-
"dist/**/*.map"
56+
"dist/**/*.map",
57+
"dist/**/*.json"
5758
],
5859
"repository": {
5960
"type": "git",

0 commit comments

Comments
 (0)