带有require.js和jquery的TypeScript在生产服务器上不起作用(require.js脚本错误)

时间:2013-06-15 11:13:19

标签: jquery requirejs typescript

我最近开始研究TypeScript。我使用require.js加载模块。目前我只加载jquery,但显然会扩展。

我的项目设置如下:

app
  > classes
     > Greeter.ts
  > AppConfig.ts
  > AppMain.ts
lib
  > jquery-1.7.2.js
  > require.js
modules
  > jquery.d.ts
  > require.d.ts
app.ts
default.htm

AppConfig.ts

/// <reference path="../modules/require.d.ts" />
/// <reference path="AppMain.ts" />

require.config({
    baseUrl: '../',
    paths: {
        'jquery': 'lib/jquery-1.7.2'
    }, 
    shim: {
        jquery: {
            exports: '$'
        }
    }
});

require(['jquery','app/AppMain'], 
    ($, main) => {
        // code from window.onload
        var appMain = new main.AppMain();
        appMain.run();
});

AppMain.ts

import gt = module("app/classes/Greeter");

export class AppMain {
    public run() {
        var el = document.getElementById('CONTENT_PH');
        var greeter = new gt.Greeter(el);
        greeter.start();
    }
}

Greeter.ts

export class Greeter {
    element: HTMLElement;
    span: HTMLElement;
    timerToken: number;

    constructor (element: HTMLElement) { 
        this.element = element;
        this.element.innerText += "The time is: ";
        this.span = document.createElement('span');
        this.element.appendChild(this.span);
        this.span.innerText = new Date().toUTCString();
    }

    start() {
        this.timerToken = setInterval(() => this.span.innerText = new Date().toUTCString(), 500);
    }

    stop() {
        clearTimeout(this.timerToken);
    }
 }

的.csproj

<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
    <TypeScriptSourceMap> --module AMD</TypeScriptSourceMap>
  </PropertyGroup>
  <Target Name="BeforeBuild">
    <Message Text="Compiling TypeScript files" />
    <Message Text="Executing tsc$(TypeScriptSourceMap) @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
    <Exec Command="tsc$(TypeScriptSourceMap) @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
  </Target>

我在本地计算机上运行了一些示例,但是当我尝试在实时服务器上运行它时,它会从require.js中提供以下脚本错误。

  

错误:脚本错误http://requirejs.org/docs/errors.html#scripterror       [打破此错误]
      var e = new Error(msg +'\ nhttp://requirejs.org/docs/errors.html#'+ id);       require.js(第194行)

我不知道为什么这会在我的开发机器上运行,但不能在实时服务器上运行。

本地运行此示例适用于chrome和Internet Explorer,但不适用于Firefox。但这可能是另一个问题。

如果您需要其他详细信息,请告知我们。

1 个答案:

答案 0 :(得分:0)

在部署到服务器时,是否在发布模式下编译网站?

在这种情况下,您需要在项目文件中添加发布版本:

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
    <TypeScriptSourceMap> --module AMD</TypeScriptSourceMap>
  </PropertyGroup>
  <Target Name="BeforeBuild">
    <Message Text="Compiling TypeScript files" />
    <Message Text="Executing tsc$(TypeScriptSourceMap) @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
    <Exec Command="tsc$(TypeScriptSourceMap) @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
  </Target>

在TypeScript 0.8.2+中,格式为:

  <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
    <TypeScriptTarget>ES5</TypeScriptTarget>
    <TypeScriptIncludeComments>true</TypeScriptIncludeComments>
    <TypeScriptSourceMap>true</TypeScriptSourceMap>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)' == 'Release'">
    <TypeScriptTarget>ES5</TypeScriptTarget>
    <TypeScriptIncludeComments>false</TypeScriptIncludeComments>
    <TypeScriptSourceMap>false</TypeScriptSourceMap>
  </PropertyGroup>
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets" />