2017-02-12 4 views
2

Я изо всех сил пытаюсь получить FileSaver для работы в моем проекте. Вот точный шаг, который я взялПолучить внешнюю библиотеку JS для работы в Angular 2

  1. НПМ установки filesaver.js --save

  2. Внутри app.component.ts

импорт * в качестве FileSaver от «filesaver. JS';

Тогда я получаю эту ошибку

Не удается найти модуль 'filesaver.js'.

Я также попытался добавить следующее к моей угловой cli.json файл

"scripts": [ 
    "../node_modules/filesaver.js/FileSaver.min.js" 
    ] 

This является самым близким, что я мог бы найти, что может помочь. Тем не менее, у этого парня есть другая установка, как и я. Должен быть простой способ правильно использовать этот файл?

Обратите внимание: после установки FileSaver из npm внутри моего узла-модуля я получаю папку filesaver.js (не знаю, почему у них есть .js в качестве имени папки). Внутри этой папки, я получаю FileSaver.js и FileSaver.min.js

Я также попытался

импорт * в качестве FileSaver от 'filesaver.js/FileSaver.min.js';

Но это просто дает мне

Не удается найти модуль 'filesaver.js/FileSaver.min.js.)

---- обновление ---

Я также пробовал typings file для этого через

npm i @types/filesaver 

и результат тот же

---- обновление -----

Вот как я получил его на работу.

Добавил @ types/filesaver и добавил следующий код.

declare module 'filesaver' { 
    var saveAs: any; 
    export = saveAs; 
} 

Примечание. Плохо ли, что я изменяю содержимое внутри моего файла node_module. Это означает, что каждый раз, когда пользователь запускает npm install, пользовательского кода там не будет. Как обойти это?

Имя папки по умолчанию, загруженное с npm, было fileaver.js. Я изменил его на файл. Почему в мире они назовут это.JS, программа, кажется, есть проблемы с распознаванием его как папку

затем импортировать * в filesaver из '' filesaver

то я могу назвать

var blob = new Blob(['Some Content'], { type: "text/csv;charset=utf-8" }); 
filesaver.saveAs(blob, "hello world.csv"); 

----- папку structure-- ---

угловой кли: 1.0.0-beta.26 узел: 6.9.1 ОС: Darwin 64 @ угловой/общее: 2.4.5 @ угловой/компилятор: 2.4.5 @ угловая/сердцевина : 2.4.5 @ угловые/формы: 2.4.5 @a ngular/http: 2.4.5 @ angular/material: 2.0.0-beta.1 @ угловой/платформенный браузер: 2.4.5 @ угловой/платформенный браузер-динамик: 2.4.5 @ угловой/роутер: 3.4.5 @ угловой/составитель-кли: 2.4.5

folder structure

+0

Для получения JS-файла в качестве модуля TS необходим соответствующий файл .d.ts. Используйте существующий, т. Е. Https://www.npmjs.com/package/@types/filesaver – estus

+0

Спасибо за ответ. Я забыл упомянуть, что я также пробовал npm i @ types/filesaver --save. Однако это не сработало. Какими были бы шаги, чтобы заставить это работать с ним? CHeers – user172902

+0

Учитывая, что у вас есть TS 2.0, он обычно выполняется, как вы описали. – estus

ответ

0

Добавить в угловой кли (что вы делали)

"scripts": [ 
    "../node_modules/filesaver.js/FileSaver.min.js" 
    ] 

Затем добавить в SRC/typings.d.ts

declare function saveAs(data: Blob, filename: string) 

теперь вы можете использовать этот метод без импорта.

var blob = new Blob(['Some Content'], { type: "text/csv;charset=utf-8" }); 
saveAs(blob, "hello world.csv"); 

Как это работает.

  1. Вы не должны создавать typings.d.ts, его добавляют угловой Cli, поэтому он должен быть в вашем Src папку внутри вашего проекта.
  2. Когда вы добавляете скрипты в angular-cli.json в секции, все скрипты будут загружаться при старте страницы. Вот почему важно, чтобы вы включали скрипты от node_modules, как вы делали «../node_modules/filesaver.js/FileSaver.min.js». И пакет был добавлен с --save флаг, как и вы, поэтому любые временные папки удаляются, и вы называете npm install, ваши скрипты будут на месте. 3.
+0

Создаю ли я свой собственный файл typings.d.ts, которого там нет на данный момент? Кроме того, как мой компонент приложения знает, чтобы загрузить его? Единственные файлы d.ts в настоящее время находятся внутри моих типов node_module/@. Однако я не хочу добавлять что-либо туда, так как папка уничтожается каждый раз, когда кто-то устанавливает npm. Cheers – user172902

+0

@ user172902 Я обновил ответ –

+0

Спасибо. Пожалуйста, ознакомьтесь с моим обновленным вопросом с снимком экрана моей структуры папок и угловой версией cli. Я считаю, что использую совершенно новую версию, и нет файла typings.d.ts. Я также получил код для работы, изменив файл d.ts внутри node_module/@ types/filesaver (который я получил от npm install @ types/filesaver --save). Однако, не нравится этот подход из-за причины, упомянутой в вопросе. Я хотел бы дать вам приблизительный подход, если вы могли бы посоветовать, как я мог бы использовать эти файлы typings.d.ts для работы внутри папки src? Cheers – user172902