4

有一个非常壮观的例子,一个基于 DurandalJS,支持 ASP.NET MVC 5 的 SPA,位于:

https://durandalauth.azurewebsites.net/

但是,它存在一个问题,即 Visual Studio 的构建后事件的 Weyland 动力优化失败,并显示如下消息

在此处输入图像描述

这很奇怪,因为构建后事件是这样的:

cd $(ProjectDir)
weyland build

从命令行执行时效果很好:

在此处输入图像描述

为什么会这样?我在网上搜索过,我一直在寻找的只是对类似但(也许)一个不相关的问题的引用,其中配置的附加行

"insertRequire: ['main'],"

[编辑]

我正在使用 Visual Studio 2013 Pro Update 2,没有插件。

我已经使用这个 url 在 GitHub 上从 DurandalAuth 中克隆了最新的项目:

git clone https://github.com/yagopv/DurandalAuth.git

你可以在这里看到这个项目: https ://github.com/yagopv/durandalauth

我在 Visual Studio 的后期构建活动中使用它:

cd $(ProjectDir)
weyland build

我的构建输出可以在这个 pastebin 中找到:http: //pastebin.com/ezpTEPk7

从 Git 克隆中可以看出,我所做的一切都对原始项目进行了零修改。

4

1 回答 1

1

当您查看构建输出时,您会发现几行,例如

呃!jshint 在 linting 时发现 52 个问题 ....

你还会发现像

警告:丢弃未使用的 ....

虽然这些不是关于执行的阻碍,但它们会导致构建返回失败。

这就是 Visual Studio 报告构建失败的原因。

编辑

我使用 ReSharper 做了一些主要的清理工作。

要完全忽略您的 .js 文件 - 您可以从 weyland-config.js 中删除 .task.jshint

还需要提到的是,您的 main-built.js 不会因随附的 weyland-config.js 而变得丑陋

在第一个 .task.uglify 中为 App/mail-built.js 添加一个排除项,并添加一个新的 .task.uglify 作为最后一个任务。main-built.js 的路径必须以 ../ 开头,因为该路径是相对于构建文件夹的。

在 web.config 中的 debug=false 时还发现了问题尚未解决。

我的 weyland-config.js 看起来像这样:

exports.config = function(weyland) {
    weyland.build('main')
        .task.jshint({
            include: 'App/**/*.js',
            exclude: 'App/main-built.js'
        })
        .task.uglifyjs({
            include: ['App/**/*.js', 'Scripts/durandal/**/*.js'],
            exclude: 'App/main-built.js'
        })
        .task.rjs({
            include:['App/**/*.{js,html}', 'Scripts/durandal/**/*.js'],
            loaderPluginExtensionMaps:{
            '.html':'text'
        },
        rjs: {
            name:'../Scripts/almond-custom', //to deploy with require.js, use the build's name here instead
            insertRequire: ['main'], //not needed for require
            baseUrl: 'App',
            wrap:true, //not needed for require
            paths: {
                'text': '../Scripts/text',
                'durandal': '../Scripts/durandal',
                'plugins': '../Scripts/durandal/plugins',
                'transitions': '../Scripts/durandal/transitions',
                'knockout': '../Scripts/knockout-3.1.0',
                'bootstrap': '../Scripts/bootstrap',
                'jquery': '../Scripts/jquery-2.1.1',
                'jquery.utilities': '../Scripts/jquery.utilities',
                'toastr': '../Scripts/toastr',
                'stashy': '../Scripts/stashy'
            },
            inlineText: true,
            optimize: 'none',
            pragmas: {
                build: true
            },
            stubModules: ['text'],
            keepBuildDir: true,
            out:'App/main-built.js'
        }
    })
    .task.uglifyjs({
        include: ['../App/main-built.js']
    });
}
于 2014-06-14T09:34:54.827 回答