isaacs / rimraf

A `rm -rf` util for nodejs
ISC License
5.66k stars 252 forks source link

Typescript: Cannot find type declarations #290

Closed caillou closed 1 year ago

caillou commented 1 year ago

I hope this is not user error.

Starting with v5.0.2, I get an error when importing rimraf in typescript:

$ ./node_modules/.bin/tsc import-ts.ts

import-ts.ts:1:24 - error TS2307: Cannot find module 'rimraf' or its corresponding type declarations.

1 import { rimraf } from 'rimraf';
                         ~~~~~~~~

Here is a repo to reproduce: https://github.com/caillou/rimraf-5.0.4-error

Updating the import to the following fixes the error:

import { rimraf } from 'rimraf/dist/esm';

PS: I love the rimraf module. I use it on most my projects. Thanks for the hard work!

caillou commented 1 year ago

Looking at the package.json, it seems that the following properties went missing:

```json { "name": "rimraf", "version": "5.0.1", "main": "./dist/cjs/src/index.js", "module": "./dist/mjs/index.js", "types": "./dist/mjs/index.d.ts", "bin": "./dist/cjs/src/bin.js", "exports": { ".": { "import": { "types": "./dist/mjs/index.d.ts", "default": "./dist/mjs/index.js" }, "require": { "types": "./dist/cjs/src/index.d.ts", "default": "./dist/cjs/src/index.js" } } }, "files": [ "dist" ], "description": "A deep deletion module for node (like `rm -rf`)", "author": "Isaac Z. Schlueter (http://blog.izs.me/)", "license": "ISC", "repository": "git://github.com/isaacs/rimraf.git", "scripts": { "preversion": "npm test", "postversion": "npm publish", "prepublishOnly": "git push origin --follow-tags", "preprepare": "rm -rf dist", "prepare": "tsc -p tsconfig.json && tsc -p tsconfig-esm.json", "postprepare": "bash fixup.sh", "pretest": "npm run prepare", "presnap": "npm run prepare", "test": "c8 tap", "snap": "c8 tap", "format": "prettier --write . --loglevel warn", "benchmark": "node benchmark/index.js", "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts" }, "prettier": { "semi": false, "printWidth": 80, "tabWidth": 2, "useTabs": false, "singleQuote": true, "jsxSingleQuote": false, "bracketSameLine": true, "arrowParens": "avoid", "endOfLine": "lf" }, "devDependencies": { "@types/node": "^18.11.9", "@types/tap": "^15.0.7", "c8": "^7.12.0", "eslint-config-prettier": "^8.6.0", "mkdirp": "^3.0.0", "prettier": "^2.8.2", "tap": "^16.3.4", "ts-node": "^10.9.1", "typedoc": "^0.23.21", "typescript": "^5.0.4" }, "tap": { "coverage": false, "libtap-settings": "libtap-settings.js", "node-arg": [ "--no-warnings", "--loader", "ts-node/esm" ], "ts": false }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "engines": { "node": ">=14" }, "dependencies": { "glob": "^10.2.5" }, "keywords": [ "rm", "rm -rf", "rm -fr", "remove", "directory", "cli", "rmdir", "recursive" ] } ``` ```json { "name": "rimraf", "version": "5.0.2", "bin": "./dist/esm/bin.mjs", "exports": { "./package.json": "./package.json", ".": { "import": { "types": "./dist/esm/index.d.ts", "default": "./dist/esm/index.js" }, "require": { "types": "./dist/commonjs/index.d.ts", "default": "./dist/commonjs/index.js" } } }, "files": [ "dist" ], "description": "A deep deletion module for node (like `rm -rf`)", "author": "Isaac Z. Schlueter (http://blog.izs.me/)", "license": "ISC", "repository": "git://github.com/isaacs/rimraf.git", "scripts": { "preversion": "npm test", "postversion": "npm publish", "prepublishOnly": "git push origin --follow-tags", "prepare": "tshy", "pretest": "npm run prepare", "presnap": "npm run prepare", "test": "tap", "snap": "tap", "format": "prettier --write . --loglevel warn", "benchmark": "node benchmark/index.js", "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" }, "prettier": { "semi": false, "printWidth": 80, "tabWidth": 2, "useTabs": false, "singleQuote": true, "jsxSingleQuote": false, "bracketSameLine": true, "arrowParens": "avoid", "endOfLine": "lf" }, "devDependencies": { "@types/node": "^20.6.5", "mkdirp": "^3.0.1", "prettier": "^2.8.2", "tap": "^18.1.4", "tshy": "^1.1.1", "typedoc": "^0.25.1", "typescript": "^5.2" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "engines": { "node": ">=14" }, "dependencies": { "glob": "^10.3.7" }, "keywords": [ "rm", "rm -rf", "rm -fr", "remove", "directory", "cli", "rmdir", "recursive" ], "type": "module", "tshy": { "exports": { "./package.json": "./package.json", ".": "./src/index.ts" } } } ```
isaacs commented 1 year ago

The types you were getting previously were incorrect in many cases.

You need to tell tsc to support package.json exports. The easiest way to do this is to set module and moduleResolution to node16 or nodenext in the compilerOptions object in tsconfig.json.