Как использовать файлы JavaScript в angular

Я пытаюсь вызвать функцию javascript в angular, вот плагин, который я использую «npm I global Payments-3ds», из которых я скопировал файлы javascript из node_modules и попытался вызвать свой компонент

Ниже приведен пример:

import {
  Component,
  OnInit
} from '@angular/core';
import {
  handleInitiateAuthentication
} from './globalpayments-3ds/types/index';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  name = 'Angular';

  ngOnInit(): void {
    const status: any = "CHALLENGE_REQUIRED"
    const resp = {
      challenge: {
        encodedChallengeRequest: "abcd",
        requestUrl: "url,
      },
      challengeMandated: "MANDATED",
      dsTransactionId: "44444",
      id: "444444",
      status: status,
    };
    const windowSize: any = "WINDOWED_600X400";
    const displayMode: any = "lightbox";

    const challengeWindow = {
      windowSize: windowSize,
      displayMode: displayMode,
    };
    handleInitiateAuthentication(resp, challengeWindow)
  }
}

Я пытаюсь вызвать handleInitiateAuthentication(), который дает мне следующую ошибку Как использовать файлы JavaScript в angular

Вот файловая структура

Как использовать файлы JavaScript в angular

из index.d.ts я вызываю функцию handleInitiateAuthentication()

Вот код Stackblitz для того же

https://stackblitz.com/edit/angular-vodezz?file=src%2Fapp%2Fapp.component.ts

Пожалуйста, помогите, я никогда не использовал функцию js в angular, я пытался добавить активы, но это не сработало. Я попытался создать библиотеку angular и добавить в нее файлы js и обновить пакет, преобразовав файл в .tgz, но ничего не работает, он всегда показывает одну и ту же ошибку,

Почему я это делаю, мне нужно обновить один из файлов из node_modules, в основном я хочу изменить файлы из модулей узлов, поэтому я скопировал эти файлы локально

это тоже выдает ошибку Как использовать файлы JavaScript в angular

Вы не должны изменять файлы внутри node_modules. Что такого не так с используемым вами пакетом, что вам нужно его модифицировать? На мой взгляд, хороший способ сделать что-то подобное — просто разветвить репозиторий, внести туда свои изменения и установить пакет npm из своего форка github. Взгляните на этот вопрос для более подробной информации об этом методе.

Octavian Mărculescu 18.03.2022 09:19

Вы можете либо добавить его в скрипты в angular.json, либо указать псевдоним: import * as myFile from 'myFile'; и тогда вы можете называть его как myFile.myFunction

Samy Sammour 18.03.2022 09:20

@SamySammour, я пробовал, не работает, если я скопирую его локально из пакета

vinuta 18.03.2022 09:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
63
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам не нужно импортировать такую ​​​​библиотеку. Прежде всего установите библиотеку в свой проект:

npm i globalpayments-3ds --save

затем в вашем ts-файле:

import { handleInitiateAuthentication } from 'globalpayments-3ds';

см. этот стекблиц

./globalpayments-3ds/globalpayments-3ds.esm.js, но в строке импорта отображается ошибка

vinuta 18.03.2022 09:19

Не удается найти модуль './globalpayments-3ds/globalpayments-3ds.esm.js' или его соответствующие объявления типа. (2307 Это ошибка, но это работает

vinuta 18.03.2022 09:19

@vinuta обновил ответ.

Ali Demirci 18.03.2022 09:24
stackblitz.com/edit/… по-прежнему показывает ту же ошибку, он неправильно выбирает путь
vinuta 18.03.2022 09:25

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

vinuta 18.03.2022 09:33
Ответ принят как подходящий

Вы должны импортировать напрямую файл js.

// @ts-ignore 
    import { handleInitiateAuthentication } from './globalpayments-3ds/globalpayments-3ds.esm.js';

Ошибка в модуле связана с тем, что вы должны определить тип вашего модуля в TypeScript. Вы можете напрямую использовать // @ts-игнорировать.

См. этот stackblitz: https://stackblitz.com/edit/angular-xz4kmp?file=src%2Fapp%2Fapp.component.ts

Не удается найти модуль './globalpayments-3ds/globalpayments-3ds.esm.js' или его соответствующие объявления типа. (2307 Это ошибка, отображаемая в строке импорта, но это работает

vinuta 18.03.2022 09:22

Ответ отредактирован, у вас есть другие решения здесь: stackoverflow.com/questions/64732623/…

Pterrat 18.03.2022 09:26

Рекомендуемый способ создания собственных модифицированных версий из библиотек с открытым исходным кодом — разветвить их и создать собственные версии.

Также обратите внимание, что вы должны учитывать лицензию этого пакета NPM, которая в случае https://github.com/globalpayments/globalpayments-js является GPL-v2, поэтому, если вы будете использовать его в коммерческих целях, вы должны следовать соглашению. Проверьте эту ветку: Стандартная общественная лицензия GNU (v2): может ли компания использовать лицензионное программное обеспечение бесплатно?.

Взглянув на ваш код Stackblitz, вы можете заметить, что в папке src/app/global-payments-3ds/ есть несколько версий JS одного и того же модуля:

  • globalpayments-3ds.js (CommonJS, используется в средах Node).
  • globalpayments-3ds.min.js (уменьшенный CommonJS).
  • globalpayments-3ds.js.map (минимизированный файл карты CommonJS для ссылки во время отладки).
  • globalpayments-3ds.esm.js (ESM, стандартный модуль ECMA).
  • ...

Чтобы использовать внешний модуль JS в приложении Angular, поскольку это JavaScript, а не TypeScript, вы должны сообщить компилятору TypeScript, что вы хотите разрешить модули JS, включив allowJS: true в tsconfig.ts файле в корне проекта.

После этого вы сможете импортировать версию ESM (globalpayments-3ds.esm.js) в свое приложение Angular, или, если вы хотите использовать версию CommonJS, вы также можете включить esModuleInterop: true в tsconfig.ts, чтобы разрешить импорт модулей CommonJS/AMD/UMD JS в ваш проект. , как globalpayments-3ds.js.

Другие вопросы по теме