代码之家  ›  专栏  ›  技术社区  ›  don

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

  •  1
  • don  · 技术社区  · 7 年前

    我想用 paths 财产 tsconfig.json 在NodeJS项目中。

    tsconfig.json配置 我有这样的东西:

    "baseUrl": ".",
    "paths": {
      "@myApp/server/*": [
        "server/src/*"
      ],
      "@myApp/common/*": [
        "common/src/*"
      ]
    },
    

    跑步 tsc 按预期输出所有JS文件,但它们保留 @myApp... 进口。因此, node 不会运行,因为它无法解析所有具有as路径的模块 @我的应用程序。。。 .

    我找不到方法来改变 路径 我已经开始了 tsconfig.json配置 一个可以由 节点 . 我只发现 this question on SO ,但它已经相当过时,而且不会导致一个干净的解决方案。

    我们有办法把TS转换成JS吗 路径 ?

    2 回复  |  直到 7 年前
        1
  •  2
  •   FacePalm    5 年前

    如果这里有人用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

        2
  •  0
  •   Yakov Fain    7 年前

    你为什么不直接用 path 代码中的模块,并解析相对于启动服务器的目录的其余目录的路径?

    看看这个例子中的第6行: https://github.com/Farata/angulartypescript/blob/master/code-samples/Angular6/chapter12/server/rest-server-angular.ts .

    这个 __dirname 指向启动服务器的目录,然后 public 是此目录的子目录。我没有使用 paths tsc选项。

        3
  •  0
  •   don    7 年前

    我找到这个了 npm 将所有绝对路径转换为相对路径的包: https://www.npmjs.com/package/tspath .

    跑步 tsc 将生成具有绝对路径的文件(例如。 @myApp/server/my-library ). 那就跑吧 tspath 将所有路径转换为相对路径。

        4
  •  0
  •   don    6 年前

    直到今天我还在用 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];
    

    注意导入,需要添加几个包才能使用此配置。