How to ignore test files in webpack with ts-loader

2020-06-09 07:44发布

I have a project that runs the test files named "*.test.ts" with jest and ts-jest. This is fine but when I launch webpack, I get errors for the test files:

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

How can I fix the webpack config to totally ignore test files ?

Here is the webpack config:

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'
      }
    ]
  }
}

[EDIT]

I used the test function to log seen files and the test files do not appear in there, so the problem is not on webpack including the wrong files but on typescript misbehaving (because tests work fine with jest).

3条回答
Ridiculous、
2楼-- · 2020-06-09 08:16

Found it. My version of 'ts-loader' was behind and somehow did not manage to properly handle installed @types.

Rule of thumb: pack, build, transpile issues: upgrade dev dependencies.

查看更多
太酷不给撩
3楼-- · 2020-06-09 08:30

You can specify a function instead of the regular expression for the loader test property; this can give you a more control.

test: function (modulePath) {
  return modulePath.endsWith('.ts') && !modulePath.endsWith('test.ts');
}
查看更多
Luminary・发光体
4楼-- · 2020-06-09 08:35

I ended up resolving this too, but in a different way, namely, adding the following settings to my .tsconfig file:

"include": [
    "./lib/**/*"
],
"exclude": [
    "./lib/__tests__"
]

Not sure why this didn't come up for the OP and company. Perhaps they already had those settings in their .tslint file (e.g. because their project had been generated or forked from another project).

But it looks like TypeScript (at least, as of 2.3.2) pays attention to these settings and ignores equivalent settings in webconfig.config.js.

查看更多
登录 后发表回答