Node.js 在NodeJS项目中使用TypeScript中的路径

Node.js 在NodeJS项目中使用TypeScript中的路径,node.js,typescript,import,Node.js,Typescript,Import,我试图在NodeJS项目中使用tsconfig.json中的path属性 在tsconfig.json中,我有如下内容: "baseUrl": ".", "paths": { "@myApp/server/*": [ "server/src/*" ], "@myApp/common/*": [ "common/src/*" ] }, 运行tsc按预期输出所有JS文件,但它们保留@myApp…导入。因此,节点将无法运行,因为它无法解析所有具有As路径的模块。@my

我试图在NodeJS项目中使用
tsconfig.json
中的
path
属性

tsconfig.json
中,我有如下内容:

"baseUrl": ".",
"paths": {
  "@myApp/server/*": [
    "server/src/*"
  ],
  "@myApp/common/*": [
    "common/src/*"
  ]
},
运行
tsc
按预期输出所有JS文件,但它们保留
@myApp…
导入。因此,
节点
将无法运行,因为它无法解析所有具有As路径的模块。
@myApp…

我找不到方法将我在
tsconfig.json
中设置的
路径
转换为可由
节点
使用的值。我只找到了,但它已经过时了,而且不能得到一个干净的解决方案


我们是否有一种方法可以使用
路径
将TS传输到JS?

为什么不在代码中使用
路径
模块,并解析到其他目录的路径(相对于您启动服务器的目录)

请看本例中的第6行:


\uuuu dirname
指向启动服务器的目录,并且
public
是该目录的子目录。我没有使用tsc的
路径
选项。

我找到了将所有绝对路径转换为相对路径的
npm
包:

运行
tsc
将生成具有绝对路径的文件(例如
@myApp/server/my library
)。然后运行
tspath
将所有路径转换为相对路径。

直到今天,我还是按照公认的答案中的建议使用,但我开始发现相对路径有一些问题,如
baseUrl:'../'

我切换到基于
webpack
的方法,使用
webpack.config.ts
config:

import { TsConfigPathsPlugin } from 'awesome-typescript-loader';
import * as fs from 'fs-extra';
import { join } from 'path';
import * as webpack from 'webpack';

const packageConfig = fs.readJSONSync('./package.json', { encoding: 'utf-8' });

const externals = {};
for (const packageName in packageConfig.dependencies)
  externals[packageName] = packageName;

const serverConfig: webpack.Configuration = {
  entry: {
    index: './src/index.ts'
  },
  resolve: {
    extensions: ['.ts', '.js'],
    plugins: [
      new TsConfigPathsPlugin({ configFileName: 'tsconfig.json' })
    ]
  },
  target: 'node',
  node: {
    __dirname: false
  },
  externals,
  output: {
    path: join(__dirname, 'dist'),
    filename: '[name].js',
    library: '[name]',
    libraryTarget: 'umd'
  },
  module: {
    rules: [{
      test: /\.ts$/,
      loader: 'awesome-typescript-loader'
    }]
  },
  plugins: [
    new webpack.BannerPlugin(`Copyright © 2018-${new Date().getFullYear()} BOHR. All rights reserved.`)
  ],
  mode: 'production',
  optimization: {
    minimize: false
  }
};

// tslint:disable-next-line:no-default-export
export default [serverConfig];

注意导入,您将需要添加几个包来使用此配置。

如果这里有人在使用nodejs和
tsconfig路径
。可以使用以下命令使绝对路径工作:

// With ts-node    
ts-node -r tsconfig-paths/register src/main.js

// With node    
node -r ts-node/register/transpile-only -r tsconfig-paths/register dist/main.js
从这里得到这个:

为什么要使用baseUrl来“./”而不是“@AvinashMaurya打字错误,我已经编辑了问题:-”),我确信您知道baseUrl是相对于“tsconfig.json”位置的。你能确认一下吗?当然可以。正如我所说,typescript工作正常,
tsconfig.json
中的设置是正确的。问题是
tsconfig.json
中定义的绝对
路径在JS中不起作用,我正在寻找一种将它们转换为相对路径的方法。您用来传输ts代码的命令是什么?请看这篇文章,:-)