如何仅在Razor视图中禁用ES6语法转换?
解决Razor视图内联脚本格式化自动转ES6语法的问题
我完全懂你碰到的这个麻烦——用Webpack+Babel给项目开启ES6支持后,JS模块跑起来没问题,但Razor视图里的内联脚本一按Ctrl+E F格式化,var就被自动换成const,导致微软旧版浏览器(比如老IE)直接报错。要搞定这个,我们可以从编辑器设置、特殊注释或者代码组织这几个方向入手:
方案1:全局调整Visual Studio的JS格式化规则
如果你用的是Visual Studio,直接修改全局设置就能禁用自动转换:
- 点击顶部菜单栏的Tools → Options
- 依次展开Text Editor → JavaScript/TypeScript → Code Style → General
- 在「Variable Declarations」区域,把「Prefer 'const' when possible」和「Prefer 'let' over 'var'」都改成Do not enforce
- 顺便检查下Formatting → Code Cleanup里的规则,确保没有启用自动把
var转成const/let的选项
不过这个是全局生效的,如果你只想针对Razor视图单独处理,下面的方案更合适。
方案2:给内联脚本添加格式化暂停注释
在Razor视图的内联脚本块里加两行特殊注释,让编辑器跳过这段代码的ES6格式化:
<script> // @formatter:off var foo = function() { var bar = 'baz'; alert(bar); } // @formatter:on </script>
// @formatter:off会暂停编辑器的格式化规则,// @formatter:on则恢复正常。这样再按Ctrl+E F时,这段脚本里的var就不会被转换成const了。
方案3:用@section分离视图脚本(推荐)
更规范的做法是把内联脚本移到@section Scripts块里,这样不仅能和页面内容分离,还能更灵活地控制脚本的编译和格式化规则:
@section Scripts { <script> var foo = function() { var bar = 'baz'; alert(bar); } </script> }
如果你的项目有针对视图脚本的单独编译配置,还可以在这里单独禁用ES6转换,确保输出的是完全兼容ES5的代码,从根源上解决旧浏览器兼容问题。
内容的提问来源于stack exchange,提问作者Christian Gollhardt
相关产品推荐
相关产品推荐

