Интеграция D3 с Angular-cli

Я пытаюсь интегрировать библиотеку диаграмм D3 с Angular CLI. Сначала я установил d3 с помощью npm install d3 --save. После того, как мои node_modules будут выглядеть

Он добавил следующие выделенные папки в папку node_modules

версия d3: "d3": "^4.2.2".

Затем я настроил конфигурацию, как показано ниже.

angular-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'

Любые предложения высоко ценятся.

Благодарю вас


person Rose18    schedule 29.08.2016    source источник


Ответы (1)


Вы должны попытаться добавить типы d3 в свой проект, d3 не включает типизации, и вы должны заставить его использовать систему импорта.

Вы можете :

  • используйте Диспетчер определений TypeScript, чтобы импортировать требуемый набор текста в свой проект:

    typings install dt~d3 --global --save

    Тогда у вас будет файл определения для d3 в вашем каталоге типизации.

  • Относится к angular-cli, вы можете установить типизацию с помощью npm :

    npm install @types/d3 --save-dev

В конце концов, вы должны взглянуть на файл определения d3, чтобы убедиться, что это правильный тип для последней версии d3.

person Paul Boutes    schedule 29.08.2016