我在我的项目中使用Typescript .如果我try 使用CommonJS导入包
const { v4: uuidv4 } = require('uuid');
然后我在编译过程中没有得到任何错误,但当我将其转换为ES6模块时,如
import { v4 as uuidv4 } from 'uuid';
我收到编译错误,如下所示:
找不到模块‘uuid’的声明文件.‘C:/Users/project/dependencies/nodejs/node_modules/uuid/dist/index.js’隐式具有""Any""类型."如果存在,请try ‘npm i--save-dev@type/uuid’,或添加一个新的声明(.d.ts)文件,其中包含‘ECLARE MODULE’UUID‘;
我已经安装了@TYPE/UUID.
对于需要类型定义(@TYPE/*)的包,我确实遇到了这个问题
如果项目 struct 类似于以下示例:
├── dependencies
│ └── nodejs
│ ├── package.json
│ ├── node_modules
│ └── package-lock.json
├── src
│ └── index.ts
├── tsconfig.json
└── .gitignore
要重新生成此问题,请运行下面提到的命令:
$ mkdir project
$ cd project
$ touch tsconfig.json
将以下json添加到tsfig.json文件中:
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"outDir": "./dist",
"strict": true,
"noImplicitAny": true,
"baseUrl": "./dependencies/nodejs/node_modules",
"typeRoots": ["./dependencies/nodejs/node_modules/@types"],
"esModuleInterop": true,
"inlineSourceMap": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["src/**/*"],
"exclude": ["dependencies", "**/*.spec.ts"]
}
$ mkdir dependencies/nodejs
$ mkdir src/models
$ cd dependencies/nodejs
$ npm init
$ npm i uuid
$ npm i -D @types/uuid typescript
$ cd ..
$ cd ..
$ cd src/models
$ touch index.ts
$ nano index.ts
import { v4 as uuid } from 'uuid'; // inline typescript error (same mentioned in the issue)
console.log(uuid());
UUID确实支持ESM模块,我在UUID GitHub上创建了一个issue.我终于发现,如果Package.json存在于项目的根中,我将永远不需要处理这样的问题.
示例:
├── src
│ └── index.ts
├── dist (or build
├── node_modules
├── package.json
├── package-lock.json
└── .gitignore
我只在使用嵌套 struct 化项目(其中在根目录中不提供Package.json文件)时需要类型定义(@TYPES/*)的包中才会遇到这个问题.
该项目 struct 基于将AWS Lambda与层一起用于无服务器应用程序.这个"依赖"文件夹基本上是一个层,而AWS-lambda层被定义为这样的 struct
依赖项/Nodejs/Package.json
因此,不应将Package.json放在项目的根目录下.
然而,我认为这不是一个包问题,而是一个打字TSconfig问题.
我试图在tsconfig文件中定义typeRoots,但它不起作用.
以下是包含生成问题的示例项目的GitHub存储库:
我想使用ES6模块在嵌套 struct 项目中导入UUID,与我共享的相同.