49

我有一项任务涉及创建一个 JavaScript 库,该库随后将被 Visual Studio 解决方案中的多个项目使用。理想情况下,我想找到一个项目类型,对于我的 JavaScript 代码,它的行为就像它是一个 C# 类库,即:

  • 它会将 JavaScript 代码“编译”(缩小,通过 Closure 检查,...)到某个输出 **.js* 文件中
  • 此输出可能被其他项目“引用”,例如 ASP.NET MVC 项目
  • 我可以指定我的项目的“构建顺序”(标准 VS 功能)

VS 2010 / 11 是否可以做到这一点,还是我需要编写一些 BAT / PowerShell 文件并自己编写脚本?

类似但略有不同的问题:Visual Studio Project Template for JavaScript/VBScript?

4

4 回答 4

9

根据我开发 Asp.Net MVC 的经验,Visual Studio 对 JavaScript 的支持有限。我想你可以做一些事情来模仿你想要的行为:

  1. 创建一个项目来存储您的 JavaScript 文件,也许是一个类库项目,它并不重要,只要它支持构建事件。将您的 JavaScript 文件放入新项目中。

  2. 在此项目上创建一个后期构建步骤,以使用外部工具最小化您的 JavaScript。我使用YUI 压缩机。您的后期构建步骤应包含类似于以下内容的行:

    java -jar $(ProjectDir)Scripts\yuicompressor-2.4.7.jar $(SolutionDir)Scripts\yourJsFile.js -o $(SolutionDir)Scripts\yourJsFile.min.js --charset utf-8

  3. 在您的解决方案中包含这个新项目。然后对于您的 Asp.Net 项目,设置您的 Active Server Pages 以便它们引用 JavaScript 文件,我使用 Razor 语法作为示例。但是,指定正确的路径可能很棘手:

@if (@Model.IsDebug)
{
<script src="@Url.Content("~/Scripts/yourJsFile.js")"  type="text/javascript"> </script>
}
else
{
<script src="@Url.Content("~/Scripts/yourJsFile.min.js")"  type="text/javascript"></script>
}

同样,确保您可以准确地引用 Asp.Net 项目中的 JavaScript 文件可能会很棘手。但我确信有办法做到这一点。也许您可以让您的后期构建步骤将 JavaScript 文件复制到某个公共位置。如果您这样做,您还需要将 JavaScript 项目上的构建后事件标记为“始终运行”,以便始终复制 JavaScript 文件。

于 2012-03-02T22:28:14.493 回答
7

好问题(+1)。我的决定是将所有 javascript 通用文件放在单独的 javascript 项目中,并将链接文件用于 web/mvc 项目中所需的 js 文件。

通过这种方式,您可以从 javascript 项目端使用颠覆控制,并使用所有可用工具从单独的通用项目端压缩和合并 js 文件。

于 2012-04-12T08:31:58.510 回答
3

我真的很好奇这个!如果有人提出其他/更好的想法,请@评论给我。

选项 1:带有 Web Essentials 的 ASP.NET Web 项目

如果您只想要一个前端 javascript 项目,这是一个简单的选择。 Web Essentials在 Visual Studio 中易于使用和安装。您可以使用它来轻松缩小。然后您可以使用Qunit进行测试。这是 javascript 客户端开发的一个非常简单和轻量级的入口点。

选项 2:适用于 Visual Studio 的 Node.js 工具

使用适用于 Visual Studio 的 Node.js 工具。它将为您提供很多这些好东西的项目模板。您可能最终不会使用 node.js,尤其是如果您只是创建一个客户端 js 库,但是拥有 node.js 有助于测试,您将希望/需要 npm 安装我原来的答案中提到的所有其他好东西(选项 3)。

这个有很多设置。这可能是一些 .NET 开发人员的入门障碍。

选项 3:网站项目

这是我过去所做的:

在此处输入图像描述

我实际上是在 Eclipse 中创建了这个项目!(不要恨我)。后来我创建了一个带有Web Site Project的 Visual Studio 解决方案。我安装了 node.js,这当然不是必需的,但我将它用作轻量级 Web 服务器。

然后您可以使用Nuget 或 Bower安装其他东西,例如:

  1. require.js用于模块管理
  2. 茉莉花用于单元测试
  3. 用于构建的grunt 或 gulp(缩小)
  4. 您可以安装jslint 或 jshint以进行代码更正。

并非所有这些都是必需的。我认为 Bower 已集成到 Visual Studio 2015 中。其中一些将需要命令行构建,但是一旦设置好就可以运行的命令很少。

于 2016-04-14T02:11:34.530 回答
0

如果您想访问 pre-build/pos-build(任务运行程序资源管理器并不真正需要),请创建一个空的 ASP.net Core 项目(它将隐藏 node_modules 文件夹并且文件将自动放入项目中(只需复制它们,不需要手动添加它们)。但是,这会生成一个 obj 和 bin 文件夹,这可能很烦人。这里的一件好事是,如果您在 www 文件夹中构建项目,则可以使用 Visual Studio 中的发布命令。

如果您不关心以上任何一项,共享的 C# 项目不会生成输出,因此它是制作 javascript 项目的好模板(我将它用于我所有的 vue spa 项目)。这里的缺点是文件嵌套不起作用=\

于 2018-02-24T16:25:38.273 回答