Skip to content

RangeError: Maximum call stack size exceeded on simple, but has deep module dependency #18270

@Develofrog

Description

@Develofrog

TypeScript Version: 2.5.2

Code

// client.ts, server.ts
import data from './module0'
console.log(data)

// (x) means variable x
// module(x).ts
import data from './module(x+1)'
export default data

// module718.ts
const data = 100
export default data

// webpack.config.js
var path = require('path')

var CleanWebpackPlugin = require('clean-webpack-plugin')

module.exports = {
  entry: {
    client: path.join(__dirname, '1-original/client.ts'),
    server: path.join(__dirname, '1-original/server.ts'),
  },

  output: {
    filename: '1.ts.[name].[hash].js',
    path: path.join(__dirname, 'dist')
  },

  resolve: {
    extensions: ['.ts'],
    modules: [
      'node_modules',
    ],
  },

  devtool: 'eval',
  target: 'web',

  module: {
    rules: [
      {
        test: /\.ts$/,
        loader: 'awesome-typescript-loader',
        include: [
          path.join(__dirname, '1-original')
        ],
        query: {
          configFileName: path.join(__dirname, 'tsconfig.1.json')
        }
      }
    ]
  },

  plugins: [
    new CleanWebpackPlugin([
      path.join(__dirname, 'dist')
    ])
  ]
}

// 

Expected behavior:
Compiled well.

Actual behavior:
Hello, I created this project for benchmarking performance of TypeScript. (and Babel.)
I made module dependence tree like below with Webpack.

test-ts

But, Webpack said..

[at-loader]: Child process failed to process the request:  RangeError: Maximum call stack size exceeded
    at String.lastIndexOf (native)
    at Object.startsWith (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:3024:20)
    at resolveExternalModule (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:24128:20)
    at resolveExternalModuleNameWorker (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:24121:20)
    at resolveExternalModuleName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:24113:20)
    at getTargetOfImportClause (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23820:32)
    at getTargetOfAliasDeclaration (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23947:28)
    at resolveAlias (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23978:30)
    at getSymbol (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23255:38)
    at resolveNameHelper (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23396:34)
    at resolveName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23383:20)
    at resolveEntityName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:24060:26)
    at getTargetOfExportAssignment (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23940:20)
    at getTargetOfAliasDeclaration (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23955:28)
    at resolveAlias (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23978:30)
    at resolveSymbol (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23969:36)
    at getTargetOfImportClause (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23830:27)
    at getTargetOfAliasDeclaration (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23947:28)
    at resolveAlias (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23978:30)
    at getSymbol (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23255:38)
    at resolveNameHelper (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23396:34)
    at resolveName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23383:20)
    at resolveEntityName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:24060:26)
    at getTargetOfExportAssignment (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23940:20)
    at getTargetOfAliasDeclaration (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23955:28)
    at resolveAlias (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23978:30)
    at resolveSymbol (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23969:36)
    at getTargetOfImportClause (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23830:27)
    at getTargetOfAliasDeclaration (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23947:28)
    at resolveAlias (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23978:30)

First, I think It is occured by awesome-typescript-loader, so I changed my loader to ts-loader.
But Result is..

Module build failed: RangeError: Maximum call stack size exceeded
    at Object.assert (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:3509:24)
    at resolveAlias (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23972:22)
    at getSymbol (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23255:38)
    at resolveNameHelper (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23396:34)
    at resolveName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23383:20)
    at resolveEntityName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:24060:26)
    at getTargetOfExportAssignment (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23940:20)
    at getTargetOfAliasDeclaration (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23955:28)
    at resolveAlias (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23978:30)
    at resolveSymbol (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23969:36)
    at getTargetOfImportClause (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23830:27)
    at getTargetOfAliasDeclaration (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23947:28)
    at resolveAlias (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23978:30)
    at getSymbol (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23255:38)
    at resolveNameHelper (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23396:34)
    at resolveName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23383:20)
    at resolveEntityName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:24060:26)
    at getTargetOfExportAssignment (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23940:20)
    at getTargetOfAliasDeclaration (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23955:28)
    at resolveAlias (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23978:30)
    at resolveSymbol (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23969:36)
    at getTargetOfImportClause (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23830:27)
    at getTargetOfAliasDeclaration (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23947:28)
    at resolveAlias (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23978:30)
    at getSymbol (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23255:38)
    at resolveNameHelper (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23396:34)
    at resolveName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23383:20)
    at resolveEntityName (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:24060:26)
    at getTargetOfExportAssignment (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23940:20)
    at getTargetOfAliasDeclaration (/Users/lawlight/Development/ts-vs-babel/node_modules/typescript/lib/typescript.js:23955:28)

And, In Babel case, All is perfect.(using same module dependence tree for transpiling)
Therefore, It is maybe not occured by Webpack. So I guess cause of this problem is TypeScript.

When I used tsc, It looks like working well, but I can't create multiple entry(server.ts, client.ts) with tsc with 1 file although I use --outFile.

What should I do?

Metadata

Metadata

Assignees

No one assigned

    Labels

    ExternalRelates to another program, environment, or user action which we cannot control.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions