6
votes

I have just published a new TypeScript-based module to the NPM registry, ooafs. However, when I try to install it and import it in another TypeScript project, VSCode gives me the following error on the import statement: Cannot find module 'ooafs'.ts(2307).

This module's source files are compiled to JavaScript to a dist/ folder and definitions (.d.ts) are also generated.

Here's the tree of the published module (the one we download when we npm install):

.
├── dist
│   ├── Entry.d.ts
│   ├── EntryFilter.d.ts
│   ├── EntryFilter.js
│   ├── Entry.js
│   ├── EntryType.d.ts
│   ├── EntryType.js
│   ├── FSTypings.d.ts
│   ├── FSTypings.js
│   ├── index.d.ts
│   └── index.js
├── LICENSE
├── package.json
└── README.md

The package.json does contain the following entries:

{
    "main": "dist/index.js",
    "types": "dist/index.d.ts",
    ...
}

Because the module works normally on Runkit (pure JS), I assume the only problem I have is related to TypeScript, and it's not the first time TypeScript tells me a module doesn't exist when missing declaration files are the only problem.

Am I missing a step in the compilation process ? Are my package.json properties wrong ?

If you need to see more code, the Github link is at the beginning of the question, and the published module structure can be found here: https://unpkg.com/[email protected]/dist/.

1
Do you see ooafs in node_modules? and test requires another module that is false or success. Try close file and open(maybe you don't download and open, after that you download it)hong4rc
The module is downloaded (it is in node_modules), all other modules load without a problem and I've restarted VSCode without any improvement. The problem definitely has something to do with my module.MrAnima

1 Answers

11
votes

Actually, the problem didn't come from my module (ooafs). It was a problem with the tsconfig.json of the project I was using the module in: The module property must be set to commonjs apparently.

Very late edit: Also, I highly recommend setting esModuleInterop to true which allows you to import non-es6 modules in a more natural manner.