代码之家  ›  专栏  ›  技术社区  ›  Flávio Lisbôa

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

  •  0
  • Flávio Lisbôa  · 技术社区  · 8 年前

    我的一个TypeScript项目面临两个问题。

    假设我想 仅接口 名为的TypeScript项目 myproject-api . 我打算在两个名为 myproject-impl1 myroject-impl2 . 我在用 Lerna 将这些项目作为名为的根项目中的模块进行管理 myproject ,他们都是 bootstrapped 根据需要( npm link ). 我也在使用 gulp 要传输TypeScript源代码,目前的配置非常简单。

    第1版。 即使有 "types": "dist/main.d.ts" "types": "src/index.ts" 在里面 package.json ,实现模块无法查看中的类型定义 myproject api . 我也试着搬家 myproject-api/src/index.ts myproject-api/index.ts ,无济于事。编译器只是在消息中失败了 Cannot find module 'myproject-api'.

    第2版。 TypeScript似乎不会生成 .d.ts 如果在 .ts 源文件, 除非 我用 tsc -d --outFile dist/main.js . 换句话说,出于某种原因,如果我使用 tsconfig.json 配置(例如。 tsc --project tsconfig.json )the .js 生成文件,但不生成 .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 :

    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("."));
    });
    

    这是 t配置。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"
        ]
    }
    

    系统信息:

    [flisboac@sonic ~]$ tsc --version
    Version 2.6.2
    [flisboac@sonic ~]$ node --version
    v9.3.0
    [flisboac@sonic ~]$ lerna --version
    2.5.1
    [flisboac@sonic ~]$ gulp --version
    [03:39:24] CLI version 2.0.0
    [flisboac@sonic ~]$ npm --version
    5.6.0
    [flisboac@sonic ~]$ uname -a
    Linux sonic 4.14.6-1-ARCH #1 SMP PREEMPT Thu Dec 14 21:26:16 UTC 2017 x86_64 GNU/Linux
    [flisboac@sonic ~]$ lsb_release -a
    LSB Version:    1.4
    Distributor ID: Arch
    Description:    Arch Linux
    Release:    rolling
    Codename:   n/a
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Flávio Lisbôa    8 年前

    正如@OJKwon所建议的, --traceResolution 帮我弄明白了。根据 the documentation for module resolution , tsc 只看 package.json 如果您指定 "moduleResolution": "node" 在里面 tsconfig.json ,默认情况下为 "moduleResolution": "classic" . 使用 index.ts 默认导入模式也仅用于 node 决议

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