我经常写小命令行实用程序,并将使用替代语言来创建这些脚本(例如node.js,php等).当我创建这些文件时,我使用标准#!
来启动文件以向shell指示解释器应该是什么.例如,对于node.js脚本,我将它放在顶部:
#!/usr/bin/env node
在PHPStorm/WebStorm中,只要文件具有扩展名,语法突出显示就可以正常工作,.js
但如果我删除扩展名,则没有语法突出显示.在SublimeText中,我可以使用命令托盘通过键入Ctrl + P/Cmd + P + SSJS(设置语法JavaScript)将当前文件的语法设置为JavaScript(例如)
JetBrains IDE中是否有任何方法可以设置单个文件的语法,而不仅仅是根据文件扩展名注册文件类型?
在构建MSBuild脚本时,我需要定义一系列默认属性,但在运行脚本时可以重写.根据以下文章,您应该使用条件来默认属性:
http://msdn.microsoft.com/en-us/library/ee240983.aspx
Microsoft如何建议:
<PropertyGroup>
<MyProperty Condition="'$(MyProperty)' == '' ">Default Value</MyProperty>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
但是,这行为完全相同:
<PropertyGroup>
<MyProperty>Default Value Without Conditional</MyProperty>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
所以,如果我有这个Target
并使用上述任何一个调用它,它具有相同的行为:
<Target Name="DefaultsTest">
<Message Text="$(MyProperty)"></Message>
</Target>
Run Code Online (Sandbox Code Playgroud)
调用:
msbuild build.xml /t:DefaultsTest /p:MyProperty="Overridden value"
Condition
如果您只是默认可以从调用中覆盖的相同属性,请解释使用该属性的好处?
这是一个完整的简单配置文件来演示: defaults.xml
<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="DefaultsTest" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MyProperty Condition=" '$(MyProperty)' == '' ">MyProperty with Conditional</MyProperty>
<MyOtherProperty>MyOtherProperty without Conditional</MyOtherProperty>
</PropertyGroup>
<Target Name="DefaultsTest">
<Message Text="$(MyProperty)"></Message>
<Message Text="$(MyOtherProperty)"></Message>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
这可以简单地运行 msbuild defaults.xml
要么
msbuild defaults.xml /p:MyProperty="Changed Value" /p:MyOtherProperty="Changed as well"