如何使用ts-loader忽略webpack中的测试文件

gas*_*ard 9 typescript webpack

我有一个项目运行名为"*.test.ts"的测试文件,其中包含jest和ts-jest.这很好但是当我启动webpack时,我得到了测试文件的错误:

ERROR in /some/path/note.test.ts
(27,3): error TS2304: Cannot find name '
Run Code Online (Sandbox Code Playgroud)

如何修复webpack配置以完全忽略测试文件?

这是webpack配置:

const path = require ( 'path' )

module.exports =
{ entry: './src/boot.tsx'
, node:
  { __dirname: false
  }
, output:
  { path: path.resolve ( __dirname, 'app', 'build' )
  , filename: 'app.js'
  , publicPath: '/live-reload/'
  }
, devtool: 'source-map'
, resolve:
  { extensions: ['', '.js', '.ts', '.tsx']
  }
, module:
  { loaders:
    [ { test: /\.tsx?$/
      , exclude: /node_modules/
      , loader: 'ts-loader'
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

[编辑]

我使用测试功能来记录看到的文件并且测试文件没有出现在那里,所以问题不在webpack上,包括错误的文件,而是打字机行为不正常(因为测试工作正常).

Jon*_*han 10

我最终解决了这个问题,但是以不同的方式,即将以下设置添加到我的.tsconfig文件中:

"include": [
    "./lib/**/*"
],
"exclude": [
    "./lib/__tests__"
]
Run Code Online (Sandbox Code Playgroud)

不知道为什么OP和公司没有提出这个问题.也许他们已经在他们的.tslint文件中有这些设置(例如,因为他们的项目是从另一个项目生成或分叉的).

但看起来TypeScript(至少从2.3.2开始)会关注这些设置并忽略其中的等效设置webconfig.config.js.

  • 我假设您将所有测试文件放在`./lib / __ tests__`下,对吗?如果在tsconfig中排除该文件夹,则TS中将失去智能感知功能。我认为一个更合理的解决方案是[this](https://github.com/TypeStrong/ts-loader/issues/544#issuecomment-316856503)。 (2认同)
  • 如果我希望打字稿在开发过程中检查测试文件,但又不想将它们包含在我的包中,该怎么办? (2认同)

Aci*_*dic 6

您可以为 loadertest属性指定一个函数而不是正则表达式;这可以给你更多的控制。

test: function (modulePath) {
  return modulePath.endsWith('.ts') && !modulePath.endsWith('test.ts');
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的指点,但它没有修复它(我添加了一条评论)。问题似乎出在 typescript 而不是 webpack 过滤...... (2认同)