发布依赖于第三方npm包的Typescript包

时间:2018-07-25 22:59:50

标签: javascript node.js reactjs typescript npm

我正在构建一个简单的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",
    ],
  }
}

和如下所示的 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"
  }
}

从上面可以看到,我的FooBarLib库依赖于一系列外部库,例如reactramda。一切都在本地编译,并且我能够生成js转译的文件以及类型定义文件。

但是,当我尝试将其导入一个单独的打字稿项目(使用打字稿v2.9.2)时,编译器无法找到我的FooBarLib中使用的任何第3方库类型(反应,拉姆达等),甚至尽管它们安装在项目的node_modules中,但失败并显示以下错误之一: Cannot find module 'react'Cannot 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>;

此外,是否存在/// <reference types="ramda" />似乎并不重要。发生相同的错误。

此外,导入FooBarLib的项目在本地安装了@types/ramda

令人沮丧的是,除了这个项目https://github.com/alexjoverm/typescript-library-starter之外,我似乎找不到更多的信息,但是仅仅使用tsconfig或package.json却没有。

更新

我发现,通过在项目的实现中手动导入第三方依赖项,可以使其成功编译。

import { foo } from 'FooBarLib';

// 3rd party dependencies
import { StyledComponentClass } from 'styled-components';
import * as React from 'react';
import * as R from 'ramda';

foo();

此解决方案的问题在于,除了无缘无故地冗长之外,如果将noUnusedLocals设置为true,也会失败。

0 个答案:

没有答案