我正在尝试在NodeJS项目的let dataModel = [["item1", "item2", "item3"], ["item4", "item5", "item6"]]
中使用paths
属性。
在tsconfig.json
中,我有这样的东西:
tsconfig.json
运行"baseUrl": ".",
"paths": {
"@myApp/server/*": [
"server/src/*"
],
"@myApp/common/*": [
"common/src/*"
]
},
会按预期输出所有JS文件,但它们保留tsc
导入。结果,@myApp...
无法运行,因为它无法解析所有路径为node
的模块。
我找不到将在@myApp...
中设置的paths
转换为tsconfig.json
可以使用的值的方法。我只找到了this question on SO,但是它已经过时了,它并不能带来一个干净的解决方案。
我们是否可以通过使用node
的方式将TS转换为JS?
答案 0 :(得分:2)
如果这里有人在使用nodejs和tsconfig-paths
。您可以使用以下命令使绝对路径正常工作:
// 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
从这里得到这个: https://github.com/dividab/tsconfig-paths/issues/61
答案 1 :(得分:0)
为什么您不只使用代码中的path
模块并解析相对于您从中启动服务器的目录的其余目录的路径?
__dirname
指向启动服务器的目录,public
是该目录的子目录。我没有使用tsc的paths
选项。
答案 2 :(得分:0)
我找到了这个npm
软件包,它将所有绝对路径转换为相对路径:https://www.npmjs.com/package/tspath。
运行tsc
将产生具有绝对路径的文件(例如@myApp/server/my-library
)。然后运行tspath
会将所有路径转换为相对路径。
答案 3 :(得分:0)
直到今天,我一直按照接受的答案中的建议使用tspath,但是我开始遇到相对路径为baseUrl: '../'
的问题。
我使用以下webpack
配置切换到基于webpack.config.ts
的方法:
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];
注意导入,您将需要添加一些软件包才能使用此配置。