代码之家  ›  专栏  ›  技术社区  ›  Jasper Blues

ts节点是否支持“@”样式的导入?如果是,如何设置?

  •  0
  • Jasper Blues  · 技术社区  · 7 年前

    我正在使用主express应用程序中的类创建一个命令行脚本。

    bin/utils/
    ├── sync-buyers.ts
    └── tsconfig.json
    

    主express应用程序已启动 /app 使用 import '@/foo/bar/thing .

    tsconfig.json 主应用程序的,如下所示:

    "paths": {
            "@/*": ["*"],
            "*": [
                "node_modules/*",
                "app/typings/*"
            ]
        }
    },
    "include": ["app/**/*", "test/**/*"],
    "exclude": ["app/**/*.test.ts", "/__tests__/", "/__mocks__/", "/__snapshots__/", "app/**/__mocks__/"],
    "files": ["typings/global.d.ts"]
    

    脚本执行

    我正在测试是否可以从主应用程序导入,因此我创建了一个 sayHello() 作用

    #!/usr/bin/env ts-node
    /* tslint:disable */
    
    import { sayHello } from '../../app/services/v2/oapp';
    sayHello();
    

    TSError: ⨯ Unable to compile TypeScript:
    ../../app/services/v2/oapp.ts(9,19): error TS2307: Cannot find module 
    '@/helpers/fetch'.
    ../../app/services/v2/oapp.ts(10,31): error TS2307: Cannot find module 
    '@/services/v2/buyer'.
    ../../app/services/v2/oapp.ts(11,51): error TS2307: Cannot find module 
    '@/http/HttpHeader'.
    

    总结:

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jacob Gillespie    7 年前

    那么打字稿呢 paths

    1. 更新节点解析器以了解类型脚本

      最常见的是 tsconfig-paths 模块用于此目的。您可以从 node 直接指挥:

      node -r tsconfig-paths/register main.js
      
    2. 重写生成的文件,以便@名称替换为“真实”的本地相对路径位置。

      这有一个独立的模块, tspath -你只要跑就行了 tspath 编译TypeScript之后,它会使用正确的路径更新生成的文件。

      如果您正在使用Webpack,也可以使用 tsconfig-paths-webpack-plugin

      最后,如果你用的是巴贝尔,你可能会对它感兴趣 babel-plugin-module-resolver 这对Babel工具链也有类似的作用,但是这里的缺点是它没有阅读 路径 配置自 tsconfig.json ,因此您必须复制您的 路径 alias

    我个人推荐 如果这是使用 tsc tsconfig路径网页包插件 如果这是前端网页包生成。

    推荐文章