构建:除非提供“--jsx”标志,否则无法使用 JSX

Posted

技术标签:

【中文标题】构建:除非提供“--jsx”标志,否则无法使用 JSX【英文标题】:Build: Cannot use JSX unless the '--jsx' flag is provided 【发布时间】:2016-05-12 05:29:14 【问题描述】:

我正在使用 VS 2013 和 tsx 文件进行反应。我可以手动构建我的项目就好了。 (右键单击并构建解决方案)

但是当我尝试在 Azure 上发布时,VS 会尝试再次构建,但当时我收到了一堆错误,如下所示:

Error   2   Build: Cannot use JSX unless the '--jsx' flag is provided. 

并指向我的 tsx 文件。

似乎 Azure Publish 使用的构建步骤与 VS 2013 不同。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我将"jsx": "react" 添加到我的tsconfig.json 以解决此错误:


    "compileOnSave": true,
    "compilerOptions": 
        "target": "es6",
        "outFile": "Content/app.js",
        "sourceMap": true,
        "jsx": "react"
    

【讨论】:

我已经试过了,它适用于 VS 构建。但是当我尝试在 Azure 上发布时,VS 会尝试再次构建,但当时我遇到了错误。【参考方案2】:

将此添加到 csproj 在 VS2015 中为我工作:

<PropertyGroup>
  <TypeScriptJSXEmit>react</TypeScriptJSXEmit>
</PropertyGroup>

发件人:Working around "Cannot use JSX unless the '--jsx' flag is provided." using the TypeScript 1.6 beta

【讨论】:

我的 .csproj 中已经有了这个。您是否尝试过在 Azure 上发布? 不幸的是我没有。抱歉,它不适合你。【参考方案3】:

在您的 tsconfig.json 中添加一个属性 jsx,其反应值为 "jsx": "react"。其次,您还应该包含文件以反映像这样的编译器选项(index.tsx)。


    "compilerOptions": 
        "outDir": "./build/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "commonjs",
        "target": "es5",
        "jsx": "react"
    ,
    "files": [
        "./src/app/index.tsx"
    ]

【讨论】:

任何引用多个文件的选项,例如 * ?【参考方案4】:

如果您碰巧仍然为此苦苦挣扎,请检查您的项目设置,确保 TSX 文件中的 JSX 编译设置为 React,并仔细检查您正在查看正确的构建配置(很容易错过,而且我不知道为什么 TS build 是特定于构建配置的)。在 VS2015 上测试。

编辑:我应该提到我能够从 VS2015 发布到 Azure;我最初遇到了同样的错误,并意识到我的非发布构建配置已更新,但发布配置未更新。我进行了上述更改,然后发布成功。

【讨论】:

正如我之前多次说过的。这与 VS 构建无关。它是关于 Azure 部署的。 VS 2015 构建良好,当我尝试将网站发布到 Azure 时出现错误。 部署到 Azure 可以正常使用此功能;我昨晚确实做到了。当我遇到这个问题时,我遇到了这个没有答案的问题,但我突然意识到我正在发布一个发布版本,而我还没有使用该配置进行构建。我为调试和测试版正确配置了项目设置,但没有发布。所以我决定把这作为一种可能性。如果这对你没有帮助,那就这样吧,但没有必要对此感到厌烦。 您没有特别提到 Azure 发布。因此,您的答案不会为以前的答案添加任何新内容。如果它适用于您的 Azure 发布过程,最好提及一下。由于以前的用户只考虑“VS build”而不是 Azure Publish 工具。如果你看到我以前所有的 cmets,我就是在告诉别人,这里没有什么可冒犯的。【参考方案5】:

此处提供的解决方案在 Visual Studio 2017 中对我有用

https://www.koskila.net/fixed-cannot-use-jsx-unless-the-jsx-flag-is-provided/

基本上改变了 TS Build 属性。

右键项目->属性->TypeScript Build

在 TSX 文件中的 JSX 编译选项中选择 React。

【讨论】:

【参考方案6】:

今天,从使用 es2019 + typescript 4.1.3 开始,我相信 npm start 命令会导致一条消息说它改变了 tsconfig.json(对我来说)

进入: "jsx": "react-jsx",

不过,Visual Studio 2019 不支持该设置,这会导致大量错误列表。

【讨论】:

根据此答案***.com/a/64976666/3559967 选择“使用工作区版本”或根据此答案***.com/a/67467204/3559967 添加带有变量DISABLE_NEW_JSX_TRANSFORM=true 的.env 文件【参考方案7】:

tsc --jsx helloWorld.tsx http://staxmanade.com/2015/08/playing-with-typescript-and-jsx/

可能对你有帮助

【讨论】:

手动构建时可以,但尝试发布到 Azure 后就不行了。因为 Azure 使用的是另一个路径的 build.exe,而不是使用与 VS 2015 相同的方法。

以上是关于构建:除非提供“--jsx”标志,否则无法使用 JSX的主要内容,如果未能解决你的问题,请参考以下文章

当“jsx”为“react-jsx”时,除非提供“--jsx”标志,否则无法使用 JSX

出现错误 TS17004:除非提供了“--jsx”标志,否则无法使用 JSX

我想在 Laravel 项目中使用 TypeScript 和 React

除非刷新页面,否则React loadable无法在每个新构建上加载组件

即使在构建可执行文件时,CMake 3.0 + Fortran + CUDA也需要-fPIC

除非选择了项目,否则Visual Studio不会保存构建更改