在NodeJS项目中的TypeScript中使用路径

时间:2018-08-04 08:27:20

标签: node.js typescript import

我正在尝试在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?

4 个答案:

答案 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模块并解析相对于您从中启动服务器的目录的其余目录的路径?

在此示例中看第6行: https://github.com/Farata/angulartypescript/blob/master/code-samples/Angular6/chapter12/server/rest-server-angular.ts

__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];

注意导入,您将需要添加一些软件包才能使用此配置。