Node.js 在NodeJS项目中使用TypeScript中的路径
我试图在NodeJS项目中使用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
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代码的命令是什么?请看这篇文章,:-)