Visual Studio 2015 JSX/ES2015 语法突出显示

2024-03-31

如何使用 ES2015 代码在 Visual Studio 2015 for JSX 中获得正确的语法突出显示?

It works fine if I remove the import and export keywords: Without import/export

我刚刚更新到 Visual Studio 2015 Enterprise Update 1,但它仍然保持不变。


更新(2017-02)

Node Tools for Visual Studio (NTVS) 自 v1.2 起就一直使用 Salsa 分析引擎,并且使用 NTVS 可能是 JSX 支持阻力最小的途径。

https://github.com/Microsoft/nodejstools https://github.com/Microsoft/nodejstools

阅读(并投票)此答案以获取更多详细信息:https://stackoverflow.com/a/41996170/9324 https://stackoverflow.com/a/41996170/9324


原答案

我遇到了同样的问题,并找到了两种解决方案 - 一种使用 ReSharper,另一种修改 Visual Studio 外部 Web 工具。

解决方案1

在 ReSharper 10 中:

  • 打开Options dialog
  • under 代码编辑 > JavaScript > 检查 choose ECMAScript 6 in the JavaScript 语言级别落下
  • 确保在 .JS 文件中启用 JSX 语法选项也被选中(假设您使用 JSX 语法)。
  • you also need to disable javascript syntax errors in Visual Studio as follows:
    • go to 工具 > 选项 > 文本编辑器 > JavaScript > IntelliSense
    • 取消选中显示语法错误框并确定。
  • 重新加载VS解决方案

重新加载解决方案后,红色波浪线对我来说消失了。但是,JSX 的语法突出显示不起作用。我在中声明的任何元素的开头部分render函数没有正确的颜色 - 但这很容易让我忽略。

我还应该提到 javascript 文件需要有.js扩大。如果你给他们.jsx扩展名,您将在第一个导入语句中看到红色波浪线。错误消息将是JSX Parser: illegal import declaration。 (这可以使用下面的解决方案#2 来解决)

更新:感谢@SntsDev 提供的解决方法有一种方法可以避免命名.jsx文件为.js:

  • 在 Visual Studio 中,转到选项 > 文本编辑器 > 文件扩展名
  • add jsx并将其分配给JavaScript 编辑器

解决方案2

好奇心战胜了我,我想探索是否有非 ReSharper 的解决方案。 Visual Studio 使用本地运行的节点服务器模块,名为react-server动态解析 JSX。该模块可以在这里找到:

C:\Program Files (x86)\Microsoft Visual Studio
14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External\react-server

Visual Studio 2015 更新 3 的更新谢谢@TheQuickBrownFox评论/更新。 对于更新 3,位置react-server命令现在位于此文件中:

C:\Program Files (x86)\Microsoft Visual Studio 
14.0\Web\External\vs-task-server\react-commands.js

进一步检查server.js or react-commands.js从上述文件夹中的文件,有一个名为transformJsxFromPost or transformJsx。该方法包含以下行:var transformed = reactTools.transformWithDetails(code, { elementMap: true });。这是参考react-tools模块 (https://www.npmjs.com/package/react-tools https://www.npmjs.com/package/react-tools),它有更多可用于解析 ES6 的选项。

所以:

  • 替换这一行:

    var transformed = reactTools.transformWithDetails(code, { elementMap: true });

  • 具有以下内容:

    var transformed = reactTools.transformWithDetails(code, { elementMap: true, es6module: "--es6module", harmony: "--harmony" });

    请注意添加--es6module and --harmony标志,指示react-tools将传入的代码视为 ES6。

  • 在 Visual Studio 中禁用 javascript 语法错误,如下所示:

    • 在 Visual Studio 中,转到工具 > 选项 > 文本编辑器 > JavaScript > IntelliSense
    • 取消选中显示语法错误框并确定
  • 重要的:重新启动 Visual Studio。你的.jsx包含 ES6 代码的文件不应再在 ES6 代码上出现红色波浪线。


NOTES:

  • 我不知道解决方案 2 中概述的更改是否对server.js文件会影响非 ES6 代码。因此,实施的风险由您自行承担。
  • 此外,您的更改很可能会被 Visual Studio 的后续更新覆盖。
  • 替换使用会很酷/有趣react-tools within react-server使用 Babel CLI。UPDATE:感谢@NickDewitt,他似乎能够完成这项工作:https://stackoverflow.com/a/36321109/9324 https://stackoverflow.com/a/36321109/9324
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 2015 JSX/ES2015 语法突出显示 的相关文章

随机推荐

  • 我可以从存储过程返回 varchar(max) 吗?

    带有 SQL Server 2005 后端的 VB net Web 系统 我有一个返回 varchar 的存储过程 但我们最终得到的值不适合 varchar 8000 我已将返回参数更改为 varchar max 但如何告诉 OleDbPa
  • SQL Server 找出表何时被重命名?

    是否可以查出表何时被重命名 作为首要问题 如果可能的话 是哪个用户干的 你可以试试这个 SELECT Name modify date FROM sys all objects WHERE Name Table name
  • 传递不带等号的查询字符串参数(值为空)是否有效?

    变化1 file jsp parameter1 parameter2 abc 变化2 file jsp parameter1 parameter2 abc 我知道变体 1 被认为是有效的 但是变体 2 被认为是有效的吗 具体来说 参数没有值
  • 使用 zope.schema 定义循环引用

    我正在尝试执行以下操作 定义两个类 其实例相互引用 例如以下示例中的用户和组 一个用户可以属于多个组 一个组可以包含多个用户 实际数据存储在数据库中 这是使用外键的多对多关系的简单问题 完全没问题 然后 数据通过 ORM 加载并存储在 py
  • Google Cloud Builder - Gradle

    继以下帖子后https cloudplatform googleblog com 2017 03 Google Cloud Container Builder a fast and flexible way to package your
  • 是否可以在 Vercel 中部署 NodeJs 应用程序?

    我正在尝试在 Vercel https vercel com https vercel com 之前的 Now 来自 CLI 但是 当我部署应用程序时 我打开站点 结果只是路径目录中的文件 而不是正在运行的应用程序 这是我的server j
  • 最简单的通过鼠标旋转相机不起作用

    好吧 这让我发疯 文档非常薄弱 Oracle 的示例应用程序非常奇怪 有一个巨大而复杂的帮助程序类 甚至这里的有关它的问题也没有答案 我基本上遵循并简化了本教程 https www genuinecoder com javafx 3d tu
  • .ogg 视频无法在 Firefox 中播放

    我们刚刚开始使用 html5 视频 似乎无法得到 ogg要在 Firefox 中播放文件 有什么提示吗 这是我们正在使用的来源
  • Objective C 中如何将字符串转换为数组?

    如何在 Objective C 中将字符串转换为数组 即 我有一个字符串 NSString str Hi How r u 这应该转换为数组 NSMutableArrayarr 其中 arr 0 嗨 arr 1 arr 2 如何 arr 3
  • 如果依赖项位于 false 分支语句内,则计算将永远停止触发

    我遇到一个问题 即我的计算可观察量在一系列依赖项更改后停止触发 最后我发现了一点 如果在最近一次评估期间依赖项位于错误分支语句内 则下次将不会触发计算即使在评估完成之前条件变为真 这是一个示例 https jsfiddle net sgs2
  • 非静态方法 next() 不能从静态上下文中引用

    我正在尝试解析一个mm dd yyyy将日期格式化为单独的字段 但是当我尝试编译时出现以下错误 非静态方法 next 不能从静态上下文中引用 什么可能导致错误 import java util Scanner public class Pr
  • 使用 c3p0 和 tomcat 与 MySQL 的僵尸连接

    我正在使用 c3p0 来管理与 MySQL 的数据库连接 问题是某些连接被永远保留 我的连接数限制为 1000 个 但由于某种未知原因 打开的连接数为 1200 个 为了调查它 我在 tomcat 服务器 shell 中执行以下命令 net
  • Eclipse PDT + 代码完成根本不起作用

    我想启动一个新的 Zend 项目 目前我面临一些有关 Eclipse PDT 的问题 我的问题是 Eclipse for PHP 中的代码完成根本不起作用 我尝试了很多不同的教程等 例如制作一个新项目并导入文件 创建一个新的工作区并在那里导
  • 在静态方法中使用 WPF 检测设计模式

    我正在使用 WPF 我有一个静态类 它执行一些在设计模式下不可用的设置 该构造函数由设计模式下的窗口调用 这会导致抛出异常 如何在静态方法中检测设计模式 以便可以调用适当的设计模式行为 The 推荐方法 https stackoverflo
  • 如何从远程页面获取iframe内容?

    我认为PHP没有用 因为iframe是在php执行后插入的 还是我错了 所以 我知道的唯一解决方案是使用 Javascript jQuery 例如 如果 JS 与 iframe 位于同一页面上 则这将起作用
  • 流式传输 html5 canvas 内容的有效方法?

    我正在尝试流式传输 a 的内容html5 canvas实时使用websockets and nodejs html5画布的内容只是一个视频 到目前为止我所做的是 我将画布转换为blob然后得到blob URL并使用 websockets 将
  • 使用 Zend Gdata 在 Google 电子表格中插入行时出错

    我正在尝试使用 Zend Gdata 1 11 库在 Google 电子表格中插入行的最简单的可能方案 电子表格的单元格 A1 中有单词 Kolona 这是整个 php 文件
  • 从一开始就构建 IDocument 最有效的方法是什么

    我想使用以下类作为具体示例逐步构建一个新的 IDocument 对象 您可以从您喜欢的任何对象开始 并使用您喜欢的任何中间对象 只要生成的对象是一个代表完整类的 IDocument 步骤 1 添加一个名为 MyNamespace 的新命名空
  • iOS 照片库读取权限

    在用户允许我们访问他的相机胶卷后 我们希望获取数据并将其从应用程序内部上传到我们的服务 有没有办法从文件中访问视频数据 打开视频文件的唯一方法是创建 AVAsset 但这对我来说还不够 我知道关闭 func requestExportSes
  • Visual Studio 2015 JSX/ES2015 语法突出显示

    如何使用 ES2015 代码在 Visual Studio 2015 for JSX 中获得正确的语法突出显示 It works fine if I remove the import and export keywords 我刚刚更新到