Webstorm 11 无需编译即可检查打字稿文件。使用 webpack 进行编译

Webstorm 11 check typescript files without compiling. Using webpack for compilation

我正在尝试将 webstorm 与 webpack 和 typescript 一起使用,但我一直在进行错误检查。 我想用webpack编译ts文件,所以我需要避免通过Webstorm编译源文件,但似乎Webstorm只在编译过程中进行错误检查。

对应于 webstorm 文档 "Resolve objects using tsconfig.json" 应该激活不编译的错误检查,但它没有。

Webstorm 未突出显示的示例代码

 { let z = 4;}
 console.log(z);

我的 tsconfig 文件:

 {
  "compilerOptions": {
    "module": "commonjs",
    "out": "build/tsc.js",
    "target": "es5",
    "sourceMap": true,
    "jsx": "react"
  },
  "exclude": [
    "node_modules"
  ]
}

同时 Visual studio 代码显示错误正常。 我的配置有任何错误吗? 是否可以突出显示使用 Webstorm 或其他 JetBrains 纠正的错误 IDE?

Typescript 版本 1.7,Webstorm 11。

我找到了阻止编译器输出 vis tsconfig - noEmit 选项的方法。

{
  "compilerOptions": {
    "module": "commonjs",
    "noEmit": true,
    "target": "es5",
    "sourceMap": true,
    "jsx": "react"
  },
  "exclude": [
    "node_modules"
  ]
}

有了这个配置,我在 webstorm 中没有额外的文件和正确的错误突出显示。

原始答案(已过时 - 请参阅下面的更新):

正如 Valery 正确指出的那样,您可以将 "noEmit" 属性 设置为 true 以防止编译器创建任何输出文件。

但是,如果您的 Webpack 安装程序使用相同的 tsconfig.json 文件,它也会阻止 webpack 创建输出文件。您只会在下次重新启动 webpack 时注意到这一点。

在我的 webpack 设置中,我使用了 "ts-loader" Typescript 加载器。 正如 ts-loader github page 中提到的,您可以覆盖编译器选项。

这是我的设置:

tsconfig.json(由 IDE 和 Webpack 使用)

"compilerOptions": {
    "noEmit": true, // do not emit js and map files
    ...

webpack.config.json(Webpack 使用)

{
    test: /\.ts$/,
    loader: 'ts-loader',
    query: {
      'compilerOptions': {
        "noEmit": false // make sure js files do get emitted
      }
    },
    ...
}

Et voila: IDE 编译器检查没有 js 和 js.map 文件污染你的源代码文件夹!

更新: 我的回答在 1 月份是一个有效的解决方法,但今天更好的解决方案是按照建议在 Webstorm/IDEA 中使用 Typescript 服务anstarovoyt.

另外不要忘记取消选中 "Enable TypeScript Compiler",如下所示:

WebStorm 2016.1(和其他 IJ 2016.1 IDE)支持 "compileOnSave" 选项。示例:

{
  "compileOnSave": false,
  "compilerOptions": {
    "module": "commonjs"
  }
}


更新: WebStorm 2016.2 具有新的 'TypeScript service' 集成。 您根本不需要 'TypeScript complier' 集成。只需检查选项 'Use TypeScript service'。此外,新集成的运行速度更快。

更新 2: WebStorm 2016.3 默认启用集成

在您的 Webpack 配置文件中添加 module.rules:

{
    test: /\.tsx?$/,
    use: [
        {
            loader: 'ts-loader',
            options: {
                compilerOptions: {
                    noEmit: false,
                },
            },
        },
    ],
}

显然,如果您已经有了 test: /\.tsx?$/ 的规则,您应该将其与上面的规则结合起来。

请注意 module.rules 是一个对象数组,而不是一个对象。