使用.ts文件

时间:2017-02-23 09:47:13

标签: angular typescript

当我在生产环境中加载页面时,出现以下错误:

  

获取http://example.com/Scripts/main.ts 404(未找到)错误:   (SystemJS)XHR错误(404 Not Found)加载   http://example.com/Scripts/main.ts

我的开发不会发生。 ENV。

这在我的index.html文件中发生。我验证了所有路径都是正确的,路径中存在main.ts文件。

<script src="/Scripts/systemjs.config.js"></script>
<script>
      System.import('/Scripts/main.ts').catch(function(err){ console.error(err); });
</script>

如果我将main.ts文件更改为main.js延伸,则 404错误。

这是我的systemjs.config.js文件:

(function (global) {
  System.config({
    transpiler: 'ts',
    typescriptOptions: {
      "target": "es5",
      "module": "commonjs",
      "moduleResolution": "node",
      "sourceMap": true,
      "emitDecoratorMetadata": true,
      "experimentalDecorators": true,
      "lib": ["es2015", "dom"],
      "noImplicitAny": true,
      "suppressImplicitAnyIndexErrors": true
    },
    meta: {
      'typescript': {
        "exports": "ts"
      }
    },
    paths: {
      'npm:': 'https://unpkg.com/'
    },
    map: {
      app: 'app',
      '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
      '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
      '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
      '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
      '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
      '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
      '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
      '@angular/router/upgrade': 'npm:@angular/router/bundles/router-upgrade.umd.js',
      '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
      '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js',
      '@angular/upgrade/static': 'npm:@angular/upgrade/bundles/upgrade-static.umd.js',

      'rxjs':                      'npm:rxjs@5.0.1',
      'ts':                        'npm:plugin-typescript@5.2.7/lib/plugin.js',
      'typescript':                'npm:typescript@2.0.10/lib/typescript.js',

    },

    packages: {
        app: {
            format: 'register',
        main: '/Scripts/main.ts',
        defaultExtension: 'ts'
      },
      rxjs: {
        defaultExtension: 'js'
      }
    }
  });

})(this);

2 个答案:

答案 0 :(得分:2)

您的浏览器不了解TypeScript,只有TypeScript编译器才能理解。 TypeScript编译器的输出是JavaScript,因此main.js是要导入的正确文件。

答案 1 :(得分:0)

请不要理会@Cobus Kruger的回答,他非常缺乏帮助。

在开发期间直接在浏览器中导入TypeScript文件(或动态捆绑它们)就像您尝试这样做一样完全有效。绝对不需要运行gulp任务或任何类似的东西来编译你的TypeScript用于开发或生产包。

您只有一些小的配置错误。

请注意下面的更新配置。我在更改周围添加了额外的空白

function (global) {
  System.config({

    defaultJSExtensions: true,

    baseURL: "/",

    transpiler: 'ts',
    typescriptOptions: {
      "target": "es5",
      "module": "system",
      "moduleResolution": "node",
      "sourceMap": true,
      "emitDecoratorMetadata": true,
      "experimentalDecorators": true,
      "lib": ["es2015", "dom"],
      "noImplicitAny": true,
      "suppressImplicitAnyIndexErrors": true
    },
    paths: {
      'npm:': 'https://unpkg.com/'
    },
    map: {



      '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
      '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
      '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
      '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
      '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
      '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
      '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
      '@angular/router/upgrade': 'npm:@angular/router/bundles/router-upgrade.umd.js',
      '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
      '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js',
      '@angular/upgrade/static': 'npm:@angular/upgrade/bundles/upgrade-static.umd.js',

      'rxjs':                      'npm:rxjs@5.0.1',
      'ts':                        'npm:plugin-typescript@5.2.7/lib/plugin.js',
      'typescript':                'npm:typescript@2.0.10/lib/typescript.js',

    },

    packages: {

        // note the differences particularly here

      app: {

        // assuming Scripts is a subdir of app
        main: 'Scripts/main.ts',

        defaultExtension: 'ts',

        meta: {
          "*.ts": {
            loader: "ts"
          },

          "*.js": {
            loader: "ts"
          }
        }
      }
    }
  });

})(this);

最后改变您的浏览器引导,以便您拥有以下

<script src="/Scripts/systemjs.config.js"></script>
<script>
      System.import('app').catch(function(err){ console.error(err); });
</script>

不,我们从我们可以想到的应用包中导入哪些会给我们 main.ts

根据脚本文件夹与应用文件夹相关的位置,您可能需要进行一些更改,但显然是来自错误的目录。

如果您实际上没有包含 main.ts 的名为 app 的文件夹,只需更改packages中的包名称即可上面的属性从应用脚本,然后是System.import('Scripts')