打字稿路径别名需要每个文件上的模块别名/注册

时间:2019-10-30 21:44:20

标签: javascript typescript module-alias

我正在将打字稿LiveData与以下android代码段一起使用:

v3.6.4

和package.json中的模块别名:

tsconfig.json

我具有以下文件夹结构:


  "compilerOptions": {
    "moduleResolution": "node",
    "baseUrl": "./src",
    "paths": {
      "@config/*": ["config/*"],
      "@config": ["config"],
    }
  }

现在可以在app / index.ts中访问

  "_moduleAliases": {
    "@config": "dist/config"
  }

和我的src |-config |-index.ts |-app |index.ts |logic.ts |-dist 命令是:

import 'module-alias/register';
import config from '@config';

npm start将成功编译,但是"start": "node -r ts-node/register ./src/app/index.ts", 将给出错误:

tsc

解决此问题的唯一方法是同时添加

npm start

Error: Cannot find module '@config' in src/app/logic.ts

似乎我必须在每个我做别名的文件中添加import 'module-alias/register'; ?是配置它的一种方法吗?

2 个答案:

答案 0 :(得分:1)

解决方案很简单:

在根文件(如app / index.ts)中的

中,将import 'module-alias/register';放在所有其他导入的末尾,而无需将其放入每个文件中。这对我来说不起作用,因为我将那个导入放在所有其他导入之前,而不是之后。

例如:

import express from 'express';
import corsFilter from 'cors';
...
import 'module-alias/register'; // This has to be after all other imports

答案 1 :(得分:0)

@2021

对我来说,我遇到了完全相同的问题:打字稿允许我只在每个模块都有 select * from databaseschema.dbo.tablename 时使用模块别名,而当它有这样的模块别名时。

花了将近一整天后,我明白了:

import 'module-alias/register'; 不会帮助转译这些装饰器。所以你必须确保js编译代码的每个消费者都已经确认并知道如何使用别名处理这些模块导入。

即:

tsc