Error [ERR_REQUIRE_ESM]: require() of ES Module /home/sky/Documents/hourlypets/node_modules/tsl-mastodon-api/lib/index.js from /home/sky/Documents/hourlypets/src/mastodon.ts not supported. Instead change the require of index.js in /home/sky/Documents/hourlypets/src/mastodon.ts to a dynamic import() which is available in all CommonJS modules. at require.extensions. [as .js] (/usr/lib/node_modules/ts-node/dist/index.js:851:20) at Object. (/home/sky/Documents/hourlypets/src/mastodon.ts:36:31) at m._compile (/usr/lib/node_modules/ts-node/dist/index.js:857:29) at require.extensions. [as .ts] (/usr/lib/node_modules/ts-node/dist/index.js:859:16) at Object. (/home/sky/Documents/hourlypets/src/bot.ts:13:20) at m._compile (/usr/lib/node_modules/ts-node/dist/index.js:857:29) at require.extensions. [as .ts] (/usr/lib/node_modules/ts-node/dist/index.js:859:16) at phase4 (/usr/lib/node_modules/ts-node/dist/bin.js:466:20) at bootstrap (/usr/lib/node_modules/ts-node/dist/bin.js:54:12) at main (/usr/lib/node_modules/ts-node/dist/bin.js:33:12) at Object. (/usr/lib/node_modules/ts-node/dist/bin.js:579:5) { code: ‘ERR_REQUIRE_ESM’ } I am importing the lib like this
import * as Mastodon from ‘tsl-mastodon-api’;
Hehe, this is the same type of answer I get from clients when I ask more than one question at a time 😆
Do you have answers to the other questions? Or, much better, can you post the code including your package.json and tsconfig to github/etc?
https://pastebin.com/QTsYgRAK
Try simply adding the following to your
package.json
:"type": "module"
I tested this with
import * as Mastodon from 'tsl-mastodon-api';
in atest.js
file using the example from their readme, executing withts-node test.js
(NOTE THAT THIS IS A JS FILE! Not a .ts file) and it works. It times out, of course, because the example URL doesn’t exist, but you get the idea. Minimal example (package.json
is default fromnpm init -y
but with the"type": "module"
added. I also tested with your package.json [adding type:module] and tsconfig.json):test.js
:import * as Mastodon from 'tsl-mastodon-api'; const mastodon = new Mastodon.API({ access_token: 'ABC', api_url: 'https://mastodon.example/api/v1/' }); const result = await mastodon.postStatus({ sensitive: true, spoiler_text: 'Hello', status: 'World' }); console.log(JSON.stringify(result));
Full
package.json
that you provided with the “type” property added :{ "name": "hourlypets", "type": "module", "version": "1.0.0", "description": "A bot for displaying hourly pets", "main": "dist/index.js", "scripts": { "start": "node dist/index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "@types/node": "^20.5.1", "typescript": "^5.1.6" }, "dependencies": { "@petfinder/petfinder-js": "^1.0.6", "dotenv": "^16.3.1", "tsl-mastodon-api": "^0.4.0" } }
On the note that I used
test.js
- if this was insteadtest.ts
and you tried to execute it directly with ts-node likets-node test.ts
it will throw the errorTypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for test.ts
. So, I made the assumption that your file is a JS based solely on that fact.If you still have problems, post a super simplified script like my
test.js
above that causes the issue for you and I’ll test with yours. You can exclude all private code - just enough to trigger the module error… meaning you could probably just have theimport
andconsole.log('hi');
and that would be sufficient.I am using TS for pretty much the entire project, but I know TS and JS are pretty much the same with a few added rules.
so attempting this causes all typescript stuff to break, sadly some of my code depends on typescript specific things.
just posted it here, the code is currently not public but I posted the ts-config and package.json
At one point I did have if set to commonJS too, but it seemed to cause issues. Sending the one the is updated as a suggestion