我正在尝试将D3图表库与Angular CLI集成。首先我用 npm install d3 --save 安装了d3。完成后,我的node_modules看起来像
d3版本为“d3”:“^ 4.2.2”。
然后我按如下方式设置配置。
角-CLI-build.js
var Angular2App = require('angular-cli/lib/broccoli/angular2-app');
module.exports = function(defaults) {
return new Angular2App(defaults, {
vendorNpmFiles: [
......
'd3/**/*'
]
});
};
系统config.ts
"use strict";
// SystemJS configuration file, see links for more information
// https://github.com/systemjs/systemjs
// https://github.com/systemjs/systemjs/blob/master/docs/config-api.md
/***********************************************************************************************
* User Configuration.
**********************************************************************************************/
/** Map relative paths to URLs. */
const map:any = {
'@angular2-material': 'vendor/@angular2-material',
// 'd3': 'vendor/d3'
'd3': 'vendor/d3/build'
};
/** User packages configuration. */
const materialPackages:string[] = [
'core',
'button',
'icon',
'sidenav',
'toolbar',
'list',
'card'
];
const packages:any = {
'd3': {
format: 'cjs',
defaultExtension: 'js',
main: 'd3'
},
};
materialPackages.forEach(name => {
packages[`@angular2-material/${name}`] = {
format: 'cjs',
defaultExtension: 'js',
main: name
};
});
////////////////////////////////////////////////////////////////////////////////////////////////
/***********************************************************************************************
* Everything underneath this line is managed by the CLI.
**********************************************************************************************/
const barrels:string[] = [
// Angular specific barrels.
'@angular/core',
'@angular/common',
'@angular/compiler',
'@angular/forms',
'@angular/http',
'@angular/router',
'@angular/platform-browser',
'@angular/platform-browser-dynamic',
// Thirdparty barrels.
'rxjs',
// App specific barrels.
'app',
'app/shared',
'app/bar',
'app/chart',
/** @cli-barrel */
];
const cliSystemConfigPackages:any = {};
barrels.forEach((barrelName:string) => {
cliSystemConfigPackages[barrelName] = {main: 'index'};
});
/** Type declaration for ambient System. */
declare var System:any;
// Apply the CLI SystemJS configuration.
System.config({
map: {
'@angular': 'vendor/@angular',
'rxjs': 'vendor/rxjs',
'main': 'main.js',
},
packages: cliSystemConfigPackages
});
// Apply the user's configuration.
System.config({map, packages});
在 app.module.ts 中,我导入了d3,如下所示。
import * as d3 from 'd3';
然后,
@NgModule({
declarations: [AppComponent, d3],
providers: [],
imports: [],
bootstrap: [AppComponent],
})
以下是我的 dist 文件夹的内容,
当我尝试使用 ng build 构建项目时,会出现以下错误。
Cannot find module 'd3'
非常感谢任何建议。
谢谢
答案 0 :(得分:2)
你应该尝试将 d3 typings 添加到你的项目中,d3不包括打字,你必须让它使用导入系统。
你可以:
使用TypeScript Definition Manager导入项目中请求的输入内容:
typings install dt~d3 --global --save
然后你将在你的打字目录中找到d3的定义文件。
参考angular-cli,您可以使用npm:
安装打字 npm install @types/d3 --save-dev
毕竟,您应该查看d3定义文件,以确保最新版本的d3的输入正确。