如何在NPM中正确设置仅限接口的项目(及其相关项目)?

时间:2018-01-04 06:24:09

标签: node.js typescript npm import typescript-typings

我在使用TypeScript项目遇到两个问题。

假设我想创建一个名为JsonConfig仅接口 TypeScript项目。我打算在名为myproject-apimyproject-impl1的两个不同项目中实现接口。我正在使用Lerna将这些项目作为名为myroject-impl2的根项目中的模块进行管理,并根据需要将所有项目bootstrappedmyproject)。我也使用npm link来转换TypeScript源代码,截至目前,配置非常简单。

问题1。即使gulp中有"types": "dist/main.d.ts""types": "src/index.ts",实施模块也无法在package.json中看到类型定义。我还尝试将myproject-api移至myproject-api/src/index.ts,但无济于事。编译器失败并显示消息 myproject-api/index.ts

问题2。如果Cannot find module 'myproject-api'.源文件中没有实际实现,那么TypeScript似乎不会生成.d.ts文件,除非我使用.ts编译项目。换句话说,出于某种原因,如果我使用tsc -d --outFile dist/main.js配置(例如tsconfig.json),则会生成tsc --project tsconfig.json个文件,但不生成.js个文件。

P.S。:我开始这个项目只是为了充实并改进我想到的一些想法。如果有人对这种项目布局有更好的设置,请告诉我。

更多信息......

我在所有.d.ts项目中使用ES6导入。

这是我的文件夹布局:

.ts

. ├── lerna.json ├── package.json ├── packages │ ├── myproject-api │ | ├── dist │ │ ├── gulpfile.js │ │ ├── package.json │ │ ├── src │ │ │ └── index.ts │ │ └── tsconfig.json │ └── myproject-impl* │ ├── dist │ ├── gulpfile.js │ ├── package.json │ ├── src │ │ └── index.ts │ └── tsconfig.json └── README.md

packages/myproject-api/src/someClass.ts

export interface ISomeClass { /* ... */ }

packages/myproject-api/src/index.ts

export * from "./someClass.ts" // (repeating this kind of export for all inner modules)

packages/myproject-impl*/src/index.ts

Gulp config:

import { ISomeClass } from "myproject-api"
// ...

这是所有项目的var gulp = require("gulp"); var ts = require("gulp-typescript"); var tsProject = ts.createProject("tsconfig.json"); gulp.task("default", ["build"]); gulp.task("build", function () { return tsProject.src() .pipe(tsProject()) .js.pipe(gulp.dest(".")); });

tsconfig.json

系统信息:

{
    "compilerOptions": {
        "target": "es6",
        "module": "amd",
        "strict": true,
        "baseUrl": ".",
        "outFile": "dist/main.js",
        "declaration": true,
        "lib": [
            "es5",
            "es2015.promise",
            "es2015.iterable"
        ]
    },
    "exclude": [
        "node_modules",
        "dist"
    ]
}

1 个答案:

答案 0 :(得分:0)

正如@OJKwon所说,--traceResolution帮助我弄明白了。根据{{​​3}},如果您在tsc中指定package.json,则"moduleResolution": "node"仅查看tsconfig.json,默认情况下为"moduleResolution": "classic"。使用index.ts作为默认导入模式也仅用于node解析。

我还必须重新启动VSCode才能正确解析导入。