Gab*_*oia 6 javascript node.js npm typescript reactjs
我正在构建一个简单的 Typescript 包/库,它是使用tsconfig 的这个变体编译的(我尝试了各种配置但没有成功)和 typescript v2.8:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"target": "es5",
"lib": ["es6", "dom"],
"module": "umd",
"moduleResolution": "node",
"declaration": true,
"declarationDir": "dist/types",
"outDir": "dist/lib",
"typeRoots": [
"node_modules/@types",
],
}
}
Run Code Online (Sandbox Code Playgroud)
和一个看起来像这样的package.json:
{
"name": "FooBarLib",
"version": "0.0.0",
"description": "A simple library",
"main": "dist/lib/index.js",
"typings": "dist/types/index.d.ts",
"author": "Gabriel C. Troia",
"license": "MIT",
"dependencies": {
"@types/ramda": "^0.25.35",
"@types/react": "^16.4.7",
"@types/react-dom": "^16.0.6",
"ramda": "^0.25.0",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"styled-components": "^3.3.3"
},
"devDependencies": {
"typescript": "2.8"
},
"peerDependencies": {
"ramda": "^0.25.35",
"react": "^16.4.1",
"styled-components": "^3.3.3"
},
"scripts": {
"prebuild": "rm -rf dist",
"build": "tsc"
}
}
Run Code Online (Sandbox Code Playgroud)
正如你在上面看到的,我的 FooBarLib 库依赖于一堆外部库,比如react和ramda。一切都在本地编译,我能够生成 js 转译文件以及类型定义文件。
但是,当我尝试在一个单独的 typescript 项目(使用 typescript v2.9.2)中导入它时,编译器找不到我的 FooBarLib(react、ramda 等)中使用的任何 3rd 方库类型,即使它们是安装在项目的 node_modules 中,因此失败并出现以下错误之一:
Cannot find module 'react'orCannot find module 'ramda'等...
d.ts 生成的文件示例:
/// <reference types="ramda" />
import * as R from 'ramda';
export declare const myCurriedFunction: R.CurriedFunction2<string | undefined, string | string[] | undefined, string>;
Run Code Online (Sandbox Code Playgroud)
此外,是否存在似乎并不重要/// <reference types="ramda" />。发生同样的错误。
此外,导入 FooBarLib 的项目已@types/ramda在本地安装。
令人沮丧的是,除了这个项目https://github.com/alexjoverm/typescript-library-starter之外,我似乎找不到太多关于此的信息,但仅使用 tsconfig 或 package.json 并没有这样做。
更新
我发现通过在项目的实现中手动导入第 3 方依赖项可以使其成功编译。
import { foo } from 'FooBarLib';
// 3rd party dependencies
import { StyledComponentClass } from 'styled-components';
import * as React from 'react';
import * as R from 'ramda';
foo();
Run Code Online (Sandbox Code Playgroud)
此解决方案的问题在于,除了无缘无故地冗长之外,如果noUnusedLocals设置为 true ,它也会失败。
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |