如何为 ImmutableJs 配置 SystemJs 以在 Angular 2 项目中工作
How to configure SystemJs for ImmutableJs to work in Angular 2 project
所以我正在尝试将 ImmutableJs 导入我的 angular 2 项目,我正在使用这种 systemjs 配置
(function(global) {
// map tells the System loader where to look for things
var map = {
'src/client': 'src/client', // 'dist',
'@angular': 'node_modules/@angular',
'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
'rxjs': 'node_modules/rxjs',
'highcharts': 'node_modules/highcharts',
'angular2-highcharts': 'node_modules/angular2-highcharts',
'immutable': 'node_modules/immutable/dist'
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'src/client': { main: 'main.js', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },
'highcharts': { defaultExtension: 'js' },
'angular2-highcharts': { main: 'index.js', defaultExtension: 'js' },
'immutable': { defaultExtension: 'js' }
};
var ngPackageNames = [
'common',
'compiler',
'core',
'forms',
'http',
'platform-browser',
'platform-browser-dynamic',
'router',
'router-deprecated',
'upgrade',
];
// Individual files (~300 requests):
function packIndex(pkgName) {
packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' };
}
// Bundled (~40 requests):
function packUmd(pkgName) {
packages['@angular/'+pkgName] = { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' };
}
// Most environments should use UMD; some (Karma) need the individual index files
var setPackageConfig = System.packageWithIndex ? packIndex : packUmd;
// Add package entries for angular packages
ngPackageNames.forEach(setPackageConfig);
var config = {
map: map,
packages: packages
};
System.config(config);
})(this);
但是当我尝试时 VS Code 没有接收到它
import { Immutable } from 'immutable/dist/immutable';
我知道 immutable.d.ts 不是一个模块。
import { Immutable } from 'immutable/immutable';
只是删除找不到模块(虽然这应该有效,因为我将不可变映射到 immutable.js 所在的 immutable/dist 目录)。在网上搜索我找不到答案,但我发现有些人在问类似的问题,但过去 6 个月都没有得到回答。如果只是指向可以详细解释什么是什么的来源,我们将不胜感激
system.config.js 文件不影响导入语句——它控制如何为最终用户解析文件。因此,第一个 import 语句中的 from 位置是正确的,尽管 "immutable" 本身也可以,因为加载程序将自行解析路径(我是但是,不完全确定此过程的细节)。
但是,您不能以这种方式导入整个 Immutable 模块,因为在 immutable.d.ts 中永远不会导出名为 "Immutable" 的任何内容。您有 2 个选择:
将通配符模块导入为名为 Immutable 的变量:
import * as Immutable from 'immutable';
...
//in your code later:
Immutable.Map({a:1, b:2, c:3})
导入单个模块:
import {Map} from 'immutable';
...
//in your code later:
Map({a:1, b:2, c:3})
你还需要像这样为前端配置system.config.js:
var map = {
...
'immutable': 'node_modules/immutable/dist'
};
var packages = {
...
'immutable': { main: 'immutable.js', defaultExtension: 'js' }
};
告诉浏览器在哪里可以找到上面使用的导出。
所以我正在尝试将 ImmutableJs 导入我的 angular 2 项目,我正在使用这种 systemjs 配置
(function(global) {
// map tells the System loader where to look for things
var map = {
'src/client': 'src/client', // 'dist',
'@angular': 'node_modules/@angular',
'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
'rxjs': 'node_modules/rxjs',
'highcharts': 'node_modules/highcharts',
'angular2-highcharts': 'node_modules/angular2-highcharts',
'immutable': 'node_modules/immutable/dist'
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'src/client': { main: 'main.js', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },
'highcharts': { defaultExtension: 'js' },
'angular2-highcharts': { main: 'index.js', defaultExtension: 'js' },
'immutable': { defaultExtension: 'js' }
};
var ngPackageNames = [
'common',
'compiler',
'core',
'forms',
'http',
'platform-browser',
'platform-browser-dynamic',
'router',
'router-deprecated',
'upgrade',
];
// Individual files (~300 requests):
function packIndex(pkgName) {
packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' };
}
// Bundled (~40 requests):
function packUmd(pkgName) {
packages['@angular/'+pkgName] = { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' };
}
// Most environments should use UMD; some (Karma) need the individual index files
var setPackageConfig = System.packageWithIndex ? packIndex : packUmd;
// Add package entries for angular packages
ngPackageNames.forEach(setPackageConfig);
var config = {
map: map,
packages: packages
};
System.config(config);
})(this);
但是当我尝试时 VS Code 没有接收到它
import { Immutable } from 'immutable/dist/immutable';
我知道 immutable.d.ts 不是一个模块。
import { Immutable } from 'immutable/immutable';
只是删除找不到模块(虽然这应该有效,因为我将不可变映射到 immutable.js 所在的 immutable/dist 目录)。在网上搜索我找不到答案,但我发现有些人在问类似的问题,但过去 6 个月都没有得到回答。如果只是指向可以详细解释什么是什么的来源,我们将不胜感激
system.config.js 文件不影响导入语句——它控制如何为最终用户解析文件。因此,第一个 import 语句中的 from 位置是正确的,尽管 "immutable" 本身也可以,因为加载程序将自行解析路径(我是但是,不完全确定此过程的细节)。
但是,您不能以这种方式导入整个 Immutable 模块,因为在 immutable.d.ts 中永远不会导出名为 "Immutable" 的任何内容。您有 2 个选择:
将通配符模块导入为名为 Immutable 的变量:
import * as Immutable from 'immutable';
...
//in your code later:
Immutable.Map({a:1, b:2, c:3})
导入单个模块:
import {Map} from 'immutable';
...
//in your code later:
Map({a:1, b:2, c:3})
你还需要像这样为前端配置system.config.js:
var map = {
...
'immutable': 'node_modules/immutable/dist'
};
var packages = {
...
'immutable': { main: 'immutable.js', defaultExtension: 'js' }
};
告诉浏览器在哪里可以找到上面使用的导出。