首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自tsconfig.json的路径在tsc之后不起作用

来自tsconfig.json的路径在tsc之后不起作用
EN

Stack Overflow用户
提问于 2020-04-21 11:44:36
回答 3查看 8.2K关注 0票数 5

在我的Express项目中,我从像@common/foo这样的路径中导入。感谢paths in tsconfig.json,它只是../common/src/foo的别名。这太棒了,并且在nodemon.json中使用这个脚本进行开发

代码语言:javascript
运行
复制
{
    "watch": ["src", "../common/src"],
    "ext": "ts",
    "ignore": ["src/public"],
    "exec": "ts-node -r tsconfig-paths/register src/index.ts"
  }

问题是我不能让它在生产模式下工作。

我用tsc构建这个项目,如果我检查生成的文件,它们将从@common/而不是从../common/src/导入内容。一开始我认为它很好,因为tsconfig-paths在运行时工作,所以我只需要将它包含在start脚本中,如下所示:

代码语言:javascript
运行
复制
node -r tsconfig-paths/register dist/index.js

不幸的是,它没有工作,而且我在控制台中得到了那些Cannot find module '@common/foo错误消息。

有什么问题吗?我配置错了吗?

我的package.json (删除了所有不相关的部分):

代码语言:javascript
运行
复制
{
  "main": "index.js",
  "scripts": {
    "start": "cross-env NODE_ENV=prod node dist/index.js",
    "build": "rimraf ./dist/ && cross-env NODE_ENV=prod tsc"
  },
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "@types/express": "^4.17.4",
    "@types/node": "^13.11.0",
    "cross-env": "^6.0.3",
    "rimraf": "^3.0.2",
    "ts-node": "^8.8.2",
    "tsconfig-paths": "^3.9.0",
    "typescript": "^3.8.3"
  }
}

我的tsconfig.json (删除了所有不相关的部分):

代码语言:javascript
运行
复制
{
  "compilerOptions": {
    "module": "commonjs",
    "baseUrl": "./",
    "outDir": "dist",
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "noImplicitAny": false,
    "target": "es6",
    "emitDecoratorMetadata": true,
    "moduleResolution": "node",
    "importHelpers": true,
    "types": [
      "node"
    ],
    "typeRoots": [
      "node_modules/@types"
    ],
    "paths": {
      "@common/*": [
        "../common/src/*"
      ]
    }
  },
  "include": [
    "./src/**/*.ts"
  ],
  "exclude": [
    "./src/dist/"
  ],
  "references": [
    {
      "path": "../common"
    }
  ]
}
EN

回答 3

Stack Overflow用户

发布于 2020-10-29 07:28:53

对于那些仍被困在这个问题上的人:

代码语言:javascript
运行
复制
node -r ts-node/register/transpile-only -r tsconfig-paths/register dist/index.js

这就是你需要做的。

票数 20
EN

Stack Overflow用户

发布于 2020-05-08 13:07:30

这在很多地方都是被问到的,而且显然类型记录可以为开发提供路径别名,但不能用于生产(请不要引用我的话,它已经用了不到一个月的时间)。

为了解决这个问题,我安装了‘模块-别名’,这是一个在构建后解决路径问题的包,而不影响开发。

我正在构建一个Express-js应用程序,并拥有以下文件:

server.js:

代码语言:javascript
运行
复制
import env from '@env';
import app from './app';

app.listen(env.SERVER_PORT || 3000);

tsconfig.json (相关部件):

代码语言:javascript
运行
复制
{
  "compilerOptions": {
    "baseUrl": "./src",
    "paths": {
      "@env": ["path/to/env"]
    }
  }
}

这解决了在开发运行时的路径,但不是在使用'tsc‘构建之后。为了解决这个问题,我添加了“模块-别名”包,并做了以下更改:

server.js:

代码语言:javascript
运行
复制
import './paths';
import env from '@env';
import app from './app';

app.listen(env.SERVER_PORT || 3000);

paths.js

代码语言:javascript
运行
复制
import 'module-alias/register';
import { addAliases } from 'module-alias';

addAliases({
  '@env': `${__dirname}/path/to/env`,
});

这确保了@env将在dev运行时和构建后进行解析。希望能帮上忙!

票数 2
EN

Stack Overflow用户

发布于 2022-10-07 20:30:25

也试着用tsc构建,但是失败了。从ts节点作者中读取评论后,我跳过构建阶段并在生产中运行。

代码语言:javascript
运行
复制
ts-node --transpileOnly -r tsconfig-paths/register src/server.ts
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61342753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档