标签: systemjs

包括连接的 Typescript JS outFile - Angular 2 + Typescript

我有以下代码:

索引.html

<script src="node_modules/systemjs/dist/system-polyfills.js"></script>
<script src="node_modules/angular2/es6/dev/src/testing/shims_for_IE.js"></script>   
<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="node_modules/angular2/bundles/router.dev.js"></script>
<script src="node_modules/angular2/bundles/http.dev.js"></script>

<script src="test.js"></script

<script>

  System.import('test.js')
        .then(null, console.error.bind(console));
</script>
Run Code Online (Sandbox Code Playgroud)

配置文件

{
  "compilerOptions": {
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "outFile": "test.js"
  },
  "exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts"
  ]
}
Run Code Online (Sandbox Code Playgroud)

在我的项目的根目录中,我将 tsc 创建的“outFile”命名为“test.js”——似乎所有组件、模块等都在 test.js 中正确连接,但应用程序没有加载任何内容除了最初的“正在加载...”之外,在浏览器中访问 index.html 时没有控制台错误。

还要注意初始 index.html:

<body>
  <rz-app>Loading...</rz-app>
</body>
Run Code Online (Sandbox Code Playgroud)

所以我实际上只是在 html 页面上得到“正在加载...”。

我一直在用头撞墙,我知道这很简单......

那么,我做错了什么 - 如何在我的 html 中包含连接的 ts outFile?

typescript systemjs angular

4
推荐指数
1
解决办法
1538
查看次数

如何使用 SystemJS 模块启动 Typescript 应用程序?

我正在使用 typescript 编译器将我的模块捆绑到一个 main.js 文件中,使用 tsconfig.json 中的这些设置:

"module": "system",
"out": "docs/js/main.js"
Run Code Online (Sandbox Code Playgroud)

这是有效的,所以根据SystemJS 文档,我只需要在我的 HTML 中包含 SystemJS 生产文件并使用这些标签启动应用程序:

<script src="js/system.js"></script>
<script>
  SystemJS.import('js/main.js');
</script> 
Run Code Online (Sandbox Code Playgroud)

我的应用程序:

import { Message } from "./message";

export class App {
    constructor() {
        let demomessage = new Message("hello");
    }
}

export class Message {      
    constructor(str:string) {
        console.log(str);
    }
}
Run Code Online (Sandbox Code Playgroud)

这会在 main.js 中生成以下 javascript 代码:

System.register("message", ...) {
    // message code here
});
System.register("app", ...) {
    // app code here
});
Run Code Online (Sandbox Code Playgroud)

我缺少的部分(微软总是缺乏的 Typescript-documentation也没有解释)是如何实际启动应用程序...... SystemJS 如何知道哪个类是起点?即使我只是将 …

typescript systemjs

4
推荐指数
1
解决办法
1297
查看次数

Angular 4 和 ngx-datatable:'ngx-datatable' 不是已知元素

我尝试ngx-datatable在我的 angular 4 项目中使用 system.js 来加载模块,但它会引发如下错误:

无法绑定到“行”,因为它不是 ngx-datatable 的已知属性。
无法绑定到“列”,因为它不是 ngx-datatable 的已知属性。
ngx-datatable 不是已知元素:

我猜 system.js 没有正确加载模块,但我找不到有关如何执行此操作的有效演示。该文档也没有帮助。

system.config.js:

map: {
     ...
     '@swimlane/ngx-datatable': 'npm:@swimlane/ngx-datatable/release/index.js',
     ...
}
Run Code Online (Sandbox Code Playgroud)

app.module.ts:

import { NgxDatatableModule } from '@swimlane/ngx-datatable';
...
imports: [
    ...
    NgxDatatableModule,
    ...
],
Run Code Online (Sandbox Code Playgroud)

组件.html:

<ngx-datatable
     [rows]="rows"
     [columns]="columns">
</ngx-datatable>
Run Code Online (Sandbox Code Playgroud)

组件.ts:

rows = [
    { name: 'Austin', gender: 'Male', company: 'Swimlane' },
    { name: 'Dany', gender: 'Male', company: 'KFC' },
    { name: 'Molly', gender: 'Female', company: 'Burger King' },
];
columns = …
Run Code Online (Sandbox Code Playgroud)

javascript datatable systemjs ngx-datatable angular

4
推荐指数
2
解决办法
1万
查看次数

加载没有 webpack 或 CDN 的静态项目

我想静态地为一个项目提供服务,该项目使用 webcomponents(使用 lit-html),没有任何打包工具,如 webpack 等

示例项目由以下结构组成:

index.html
app.js
package.json
Run Code Online (Sandbox Code Playgroud)

package.json

{
  "name": "lit",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@webcomponents/webcomponentsjs": "^2.2.7",
    "lit-element": "^2.0.1"
  }
}
Run Code Online (Sandbox Code Playgroud)

app.js

import { LitElement, html } from 'lit-element';

class FooElement extends LitElement {
  render() {
    return html`<div>hello world!</div>`;
  }
}
window.customElements.define('x-foo', FooElement);

Run Code Online (Sandbox Code Playgroud)

最后,index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title></title> …
Run Code Online (Sandbox Code Playgroud)

html javascript systemjs es6-modules lit-element

4
推荐指数
1
解决办法
1057
查看次数

如何在Aurelia javascript应用程序中加载谷歌地图javascript api?

我找到了npm模块google-maps-api并安装了它(npm install google-maps-api)但是我无法弄清楚如何用systemjs/jspm导入它(jspm找不到这个模块).这是我的config.js的配置:

"paths": {
"*": "app/dist/*.js",
"github:*": "app/jspm_packages/github/*.js",
"npm:*": "app/jspm_packages/npm/*.js" }
Run Code Online (Sandbox Code Playgroud)

所以,当我尝试做这样的事情时:

import {mapsapi} from 'google-maps-api';
Run Code Online (Sandbox Code Playgroud)

我在浏览器控制台中收到以下错误:

GET https:// localhost:44308/app/dist/google-maps-api.js 404(未找到)

看看文件系统,我看到npm在app/node_modules/google-maps-api下安装了模块,那么如何在Aurelia模块的import子句中引用它呢?

google-maps-api-3 node.js systemjs aurelia jspm

3
推荐指数
2
解决办法
3192
查看次数

如何告诉systemjs忽略导入

这适用于systemjs库,而不是systemjs-builder

我可能在这里有一些优势.但我正在尝试设置我的前端Web应用程序,以在命令行中运行它的单元测试.我的设置当前构建了寄存器格式的并根据其规范将负载导入到站点中.我目前面临的问题是我的一个依赖项reflect-metadata有一个节点自动检测系统进行require('crypto')调用,这是一个本机节点模块(在npm中不可用).我收到的错误是:

错误:ENOENT:没有这样的文件或目录,打开"/Users/path/to/project/node_modules/crypto.js"

我理解这里有很多东西在玩,但我所遵循的行为是让systemjs完全忽略require('crypto')调用并允许它完全不变,因为节点会在运行时正确加载它.

由于我们正在创建的多模块企业应用程序,由于接收Systemjs版本的子依赖项而不是临时commonjs构建,我实际上无法自由地将打字稿导出到commonjs.(唯一的方法是在我们的私有npm dist构建中包含commonjs版本,这远非理想)

这是我用于系统的当前配置,因为我一直试图让系统忽略加密库所需.我已经把它保持在上面生成错误的确切状态,评论等所有你可以看到我尝试过的东西.

System.config({
  defaultJSExtensions: true,
  map: {
    'angular2': 'node_modules/angular2',
    'reflect-metadata': 'node_modules/reflect-metadata/Reflect',
    'crypto': 'node_modules/crypto'
  }
  // packages: {
  //   'reflect-metadata': {
  //     format: 'global',
  //     exports: 'Reflect',
  //     defaultExtension: false,
  //     meta: {
  //       '*': {
  //         defaultExtension: false
  //       }
  //     }
  //   }
  // }
  // meta:{
  //   'reflect-metadata/Reflect':{
  //     format: 'global',
  //     exports: 'Reflect',
  //     defaultExtension: false
  //   }
  // }
});
Run Code Online (Sandbox Code Playgroud)

node.js systemjs

3
推荐指数
1
解决办法
1167
查看次数

Angular2 node_module rxjs 404错误

我正在尝试编译angular2应用程序,但我收到以下错误:

错误:XHR错误(404 Not Found)加载http:// localhost:3000/node_modules/rxjs(...)

systemjs.config.js

(function(global) {
    // map tells the System loader where to look for things
    var map = {
        'app': 'app', // 'dist',
        '@angular': 'node_modules/@angular',
        'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
        'rxjs': 'node_modules/rxjs'
    };

    // packages tells the System loader how to load when no filename and/or no extension
    var packages = {
        'app': {
            main: 'main.js',
            defaultExtension: 'js'
        },
        'rxjs': {
            defaultExtension: 'js'
        },
        'angular2-in-memory-web-api': {
            main: 'index.js',
            defaultExtension: 'js'
        },
    };
    var ngPackageNames = [
        'common', …
Run Code Online (Sandbox Code Playgroud)

javascript systemjs angular

3
推荐指数
1
解决办法
4338
查看次数

将MathJax集成到SystemJS构建中

SystemJS用来构建一个Angular 2应用程序,我想开始MathJax在组件中使用.我安装了:

npm install --save-dev mathjax
npm install --save @types/mathjax
Run Code Online (Sandbox Code Playgroud)

MathJax现已安装在/node_modules/mathjax.当我的组件执行时import "mathjax",文件/node_modules/mathjax/MathJax.js已加载.到现在为止还挺好.

问题是该文件然后尝试使用相对于项目根目录而不是MathJax安装目录的路径加载其他文件.

例如,MathJax.js尝试加载

/extensions/MathMenu.js  404 Not found
/extensions/MathZoom.js  404 Not found 
Run Code Online (Sandbox Code Playgroud)

正确的路径是

/node_modules/mathjax/extensions/MathMenu.js
/node_modules/mathjax/extensions/MathZoom.js
Run Code Online (Sandbox Code Playgroud)

快速查看源文件内部显示URL是这样引用的:

[MathJax]/extensions/MathMenu.js
Run Code Online (Sandbox Code Playgroud)

知道我应该在哪里解决这个问题吗?我知道我不应该更改MathJax.js文件本身,因为更新后将覆盖任何更改.使用htaccess或其他服务器端重定向也没有意义.

我知道我可以使用CDN加载一个有效的MathJax包:

<script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=AM_SVG"></script>
Run Code Online (Sandbox Code Playgroud)

但是我正在尝试学习如何将库集成到我的构建设置中.

build mathjax systemjs angular

3
推荐指数
1
解决办法
349
查看次数

构造rxjs/Observable时出错

为什么以下TypeScript代码编译,但systemjs无法在运行时正确加载依赖项?

import { Observable } from 'rxjs';
let temp123 = new Observable<String>();
Run Code Online (Sandbox Code Playgroud)

但是,这有效:

import { Observable } from 'rxjs/Observable';
let temp123 = new Observable<String>();
Run Code Online (Sandbox Code Playgroud)

具体来说,第一个代码会生成一个包含以下代码的.js文件:

var Observable_1 = require('rxjs');
var temp123 = new Observable_1.Observable();
Run Code Online (Sandbox Code Playgroud)

但第二个代码生成这个:

var Observable_1 = require('rxjs/Observable');
var temp123 = new Observable_1.Observable();
Run Code Online (Sandbox Code Playgroud)

行require('rxjs')失败并出现404错误,因为那里没有文件.为什么typescript编译器能够解决这个问题,但是systemjs无法在运行时加载它?

另外值得注意的是:只有在使用Observable执行某些操作时才会出现此问题.例如,以下代码有效:

import { Observable } from 'rxjs';
let temp123: Observable<String> = null;
let xyz = temp123.first();
Run Code Online (Sandbox Code Playgroud)

我可以使用 Observable,并在其上调用方法,而不会在TypeScript编译器中生成require('rxjs').但我无法构建一个,我也无法扩展它.

版本:TypeScript 2.0.3,Systemjs 0.19.27,rxjs 5.0.0-beta.12

rxjs systemjs typescript2.0

3
推荐指数
1
解决办法
415
查看次数

更新到Angular 6和rxjs 6后,Plunker损坏了

在Plunker中有一个Angular应用程序,因为我已经升级了我的应用程序以使用Angular 6和rxjs 6 ,所以它不再有效.

这是我的config.js档案:

var angularVersion;
if(window.AngularVersionForThisPlunker === 'latest'){
  angularVersion = ''; //picks up latest
}
else {
  angularVersion = '@' + window.AngularVersionForThisPlunker;
}

System.config({
  //use typescript for compilation
  transpiler: 'typescript',
  //typescript compiler options
  typescriptOptions: {
    emitDecoratorMetadata: true
  },
  paths: {
    'npm:': 'https://unpkg.com/'
  },
  //map tells the System loader where to look for things
  map: {
    'ngx-duration-picker': 'https://unpkg.com/ngx-duration-picker@latest/bundles/ngx-duration-picker.umd.js',
    'app': './src',
    '@angular/core': 'npm:@angular/core'+ angularVersion + '/bundles/core.umd.js',
    '@angular/common': 'npm:@angular/common' + angularVersion + '/bundles/common.umd.js',
    '@angular/common/http': …
Run Code Online (Sandbox Code Playgroud)

rxjs typescript plunker systemjs angular

3
推荐指数
1
解决办法
1109
查看次数