标签: systemjs

使用同步语法在运行时导入commonJS,AMD和ES6模块

我最近一直在编写很多ES6,使用import {variable} from 'ES6module'语法,并使用traceur-compiler在浏览器中编译代码.我开始关注systemjs,因为它似乎可能允许我使用相同的语法来导入AMD,commonJS ES6模块.

尽管如此,阅读文档已经开始让我感到困惑.我看到很多异步调用System.import('path/to/module').then(function(variable) { ... }),我不习惯用于依赖项导入.

我已经阅读了ES6模块的实用工作流程,其涵盖了许多不同的工作流程,其中没有一个涉及在运行时导入ES6模块 AMD/commonjs模块.我在想这样的事情:

import {myObject} from 'my/es6/module';
import {_} from 'lib/underscore';
Run Code Online (Sandbox Code Playgroud)

或者如果不是,至少:

import {myObject} from 'my/es6/module';
var _ = require('lib/underscore');
Run Code Online (Sandbox Code Playgroud)

systemjs是否可以使用其中任何一个?

module ecmascript-6 systemjs

6
推荐指数
1
解决办法
3733
查看次数

如何使用TypeScript加载System.js模块?

我正在尝试让TypeScript使用默认的Aurelia骨架,它基于System.JS作为加载器.

我无法让TypeScript接受模块导入.我将其中一个骨架文件"nav-bar.js"重命名为"nav-bar.ts",看看我是否可以将该示例转换为TypeScript.代码导致编译器错误:"错误:(5,24)TS2307:找不到外部模块'aurelia-framework'."

import {bindable} from "aurelia-framework";

export class NavBar {
  //noinspection ES6Validation
  @bindable router = null;
}
Run Code Online (Sandbox Code Playgroud)

如何让TypeScript将aurelia-framework视为有效的导入?在项目的根目录中有一个名为config.js的文件似乎描述了"aurelia-framework"的具体位置,但TypeScript不知道如何加载它.

在此先感谢您的帮助.

javascript typescript systemjs aurelia

6
推荐指数
1
解决办法
4164
查看次数

Angular2,用于凉亭组件的SystemJS路径

我创建了一个示例Angular2应用程序,其中一个模块使用外部库(其余),如下所示:

/// <reference path="../../typings/tsd.d.ts" />
import rest = require('rest');
import jsonpClient = require('rest/client/jsonp');
import mime = require('rest/interceptor/mime');
... 
Run Code Online (Sandbox Code Playgroud)

我用过

tsd install rest
Run Code Online (Sandbox Code Playgroud)

将rest.d.ts放在"typings"目录中,并使用过

bower install rest 
Run Code Online (Sandbox Code Playgroud)

获取运行时版本(这在任何地方都没有解释.我假设我必须做这样的事情?)

我已经设置了我的gulp脚本,将两个目录从bower_components("rest"及其依赖"when")复制到dist/lib中

应用程序本身编译良好,但在浏览器中,它无法解析其余/何时模块依赖.

我已经添加了

 System.config({
      "baseURL": "/",
      "transpiler": "traceur",
      "paths": {
        "components/*": "components/*.js",
        "provider/*": "provider/*.js",
        "services/*": "services/*.js",
        "model/*": "model/*.js",
        "rest": "lib/rest/rest.js",
        "rest/*": "lib/rest/*.js",
        "when": "lib/when/when.js",
        "when/*": "lib/when/*.js",
        "*": "lib/*.js"
      }
    });
Run Code Online (Sandbox Code Playgroud)

到我的index.html文件,我可能继续将文件添加到该列表,但不知何故,这感觉......错了.

当然,我必须在index.html中列出每个包的内部文件结构,这是不对的?我看到"when"模块假定在"./lib"中找到自己的依赖项,其中"rest"具有完全不同的结构.

所以,我的问题是:

  • 我怎么误解了如何将通过bower(或npm)管理的javascript包导入到Angular2的客户端?

  • 我是否真的需要列出System.paths中每个模块的每个文件才能使其工作?

systemjs angular

6
推荐指数
1
解决办法
2053
查看次数

SystemJS插件可以修改已经转换的文件吗?

在尝试让Angular(1.x)使用​​systemjs时,我意识到目前没有能力(我知道)自动插入$inject到角度组件中,即使函数的参数受到损坏,这也会使组件保持工作状态.缩小器.手动创建$inject注释很繁琐,容易出错并且违反了DRY主体.

有一个成熟的npm模块ng-annotate,它可以解决这个问题并在许多类似的情况下用于捆绑.正如我一直在探索SystemJS,我发现有一个插件系统包含翻译源代码的能力,这正是ng-annotate它的作用.

但是,从我所看到的,SystemJS只能让您将特定文件扩展名映射到单个加载器,并且所有插件示例都支持新的文件类型.我想做的是对SystemJS的转换过程的输出进行后处理,而不是添加新的文件类型.似乎SystemJS应该能够做到这一点,因为它有一个处理管道,但我无法弄清楚如何以正确的方式挂钩它.现在我使用Browserify来达到同样的效果,但我最终得到了一组相当复杂的构建任务,如果可能的话我想用SystemJS简化它.

其他策略也可以ng-annotate在SystemJS的加载器管道中使用.

node.js angularjs systemjs jspm ng-annotate

6
推荐指数
1
解决办法
179
查看次数

如何使用SystemJS指定库依赖项?

使用SystemJS,如何指定一个库依赖于另一个库?例如,Bootstrap JavaScript库依赖于jQuery.基于SytemJS文档,我假设我将使用System.config.meta属性指定此依赖项:

System.config({
    baseUrl: './scripts',
    defaultJSExtensions: true,
    map: {
        jquery: './lib/jquery-2.2.0.min.js',
        bootstrap: './lib/bootstrap.min.js'
    },
    meta: {
        bootstrap: {
            deps: ['jquery']
        }
    }
});
System.import('./scripts/app.js');
Run Code Online (Sandbox Code Playgroud)

但这似乎没有效果.当我运行我的应用程序时,Bootstrap库会抛出一个Bootstrap's JavaScript requires jQuery错误 - 这意味着在jQuery之前加载了Bootstrap.

如何确保在Bootstrap之前始终加载jQuery?

javascript amd commonjs systemjs es6-module-loader

6
推荐指数
1
解决办法
3085
查看次数

角度2应用程序不加载,但我没有错误

当我加载我的typescript angular 2测试应用程序时,它没有按预期加载.

我总是看到"正在加载..."索引html文件中的my-app是什么.

在bowser控制台中我也没有错误:/

有人看到错误吗?

指数

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>test</title>
    <script src="~/lib/es6-shim.js"></script>
    <script src="~/lib/es6-promise.js"></script>
    <script src="~/lib/system-polyfills.js"></script>
    <script src="~/lib/angular2-polyfills.js"></script>
    <script src="~/lib/system.js"></script>
    <script src="~/lib/Rx.js"></script>
    <script src="~/lib/angular2.js"></script>
    <script src="~/lib/http.dev.js"></script>
    <script src="~/lib/router.dev.js"></script>
    <script>
            System.config({
                packages: {
                    app: {
                        format: 'register',
                        defaultExtension: 'js'
                    }
                }
            });
            System.import('app/main')
                  .then(null, console.error.bind(console));
    </script>
</head>
<body>
    <my-app>Loading...</my-app>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

main.ts

///<reference path="../node_modules/angular2/typings/browser.d.ts"/>

import {provide} from 'angular2/core';
import {bootstrap, ELEMENT_PROBE_PROVIDERS} from 'angular2/platform/browser';
import {HTTP_PROVIDERS} from 'angular2/http';
import {AppComponent} from './app.component' …
Run Code Online (Sandbox Code Playgroud)

systemjs angular

6
推荐指数
1
解决办法
8920
查看次数

在SystemJS加载器环境中将相对路径映射到绝对路径的方法

我正在使用SystemJS加载器(使用commonJS模块,但这不重要),主要是直接访问下的组件node_modules.

现在在运行时,是否可以从相对的环境中查找当前环境中的绝对路径?

即如果我这样做require('./myComponent')将获取,http://localhost:3000/app/myComponent.js但万一通过npm install(因此驻留node_modules)安装此组件,SystemJS将正确加载http://localhost:3000/node_modules/dist/myComponent.js.有没有办法从相对的路径中查找这个绝对路径?

就是这样的var absPath = SystemJS.lookup('./myComponent')

javascript commonjs node.js systemjs

6
推荐指数
1
解决办法
129
查看次数

让Cesium,SystemJS和Angular2工作?

有人有一个工作示例,其中SystemJS(不是Webpack)与Angular2(在TypeScript中,而不是Dart)与Cesium(npm)一起使用?

我知道cesiumjs网站上的这篇博文:https://cesiumjs.org/2016/01/26/Cesium-and-Webpack/

我喜欢作者的说法,"你不能简单地做一个require('cesium')." 该文章的问题在于它使用Webpack方式,而我没有.

无论哪种方式,我希望解决这个特定的错误(来自浏览器): Error: (SystemJS) AMD module http://localhost:3000/node_modules/cesium/Build/CesiumUnminified/Cesium.js did not define

这就是我所拥有的:

在我的systemjs.config.js档案中:

paths: {'npm:' :  'node_modules/'},
map: {
    // our app is within the dist folder
    app: 'dist',

    // angular bundles
    '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
    ...

    'require': 'npm:requirejs/require.js',
    'cesium': 'npm:cesium/Build/CesiumUnminified/Cesium.js',

    // Other packages
    ...
}
Run Code Online (Sandbox Code Playgroud)

@Injectable() 例:

let Cesium = require('cesium');
import { Injectable } from '@angular/core';

@Injectable()

export class CesiumClock {
    private _start:any = Cesium.JulianDate.now();
    private _stop:any = Cesium.JulianDate.addHours(this._start,12,new Cesium.JulianDate());
    private _clock:any …
Run Code Online (Sandbox Code Playgroud)

typescript cesium systemjs angular

6
推荐指数
1
解决办法
1695
查看次数

Angular2应用程序未在移动设备上显示加载文本

我有一个angular2应用程序,其中包含使用SystemJS的打字稿; 我使用了以下种子应用程序.

在桌面上,您可以看到标签之间的加载文本(例如Loading...).

在我的索引页面上,我有一个小的加载div来显示我的应用程序在首次加载时速度很慢.

但这div并没有在移动设备上显示出来.

索引代码

<app>
    <header>
        <nav>
            <div class="container col-sm-10 col-sm-offset-1">                 
                  <div class="navbar-header">      
                    <a class="navbar-brand col-xs-3 col-xs-offset-1">
                      <img src="./assets/logo.png" />
                    </a>
                  </div> 
            </div> 
         </nav>
    </header>

    <div class="bounceInDown animated">  
        <div class="loading-wrapper animated fadeIn">      
            <p class="loading-text">Hold on!<br />We're unpacking...</p>
            <div class="loading-icon preload"></div>
        </div>
    </div>
</app>
Run Code Online (Sandbox Code Playgroud)

如果您需要更多代码示例,请与我们联系.

我基本上希望这些标签div内部app能够在移动设备上显示; 我也对任何jQuery移动技巧持开放态度.

它似乎是keyframe.你能让我知道什么是错的吗?

CSS和关键帧代码

 .loading-icon {
        animation: scaleout 1.0s infinite ease-in-out;
        background-color: #ffffff;
        border-radius: 100%;
        display: inline-block;
        height: 40px;
        margin: …
Run Code Online (Sandbox Code Playgroud)

javascript typescript systemjs angular

6
推荐指数
1
解决办法
362
查看次数

从字符串变量导入模块

我需要从内存变量中导入JavaScript模块。我知道可以使用SystemJSWebpack来完成。

但是我在任何地方都找不到合适的工作示例或文档。这些文档主要讨论动态导入.js文件。

基本上我需要像下面那样导入模块

let moduleData = "export function doSomething(string) { return string + '-done'; };"
//Need code to import that moduleData into memory
Run Code Online (Sandbox Code Playgroud)

如果有人可以指向文档,那将是很棒的

javascript typescript systemjs webpack angular

6
推荐指数
2
解决办法
987
查看次数