2017-08-21 2 views
2

Ich weiß, diese Frage wurde zuvor gestellt, aber nach der Suche und versuchen Tonnen von Dingen, die ich fragen muss.eckig 4, global importieren externe Javascript

Ich bin mit dem Angular Starter Paket und versuchen, eine external javascript library

ich es habe kein Problem zu importieren direkt in meine Komponente importieren wie so

import * as loadImage from 'blueimp-load-image/js/index.js'; 

Aber soweit ich weiß, ich sollte extern importieren Skripts (mit asynchronen Vorgängen) vor zone.js, da andernfalls Probleme bei der Änderungserkennung auftreten können. Genau das ist genau das Problem, das ich bei Safari in iOS habe. Zur Zeit muss ich die Änderungserkennung manuell aufrufen.

In Winkel Starter-Paket ist zone.js in einer Datei namens polyfills.ts erforderlich, die als eine Brocken/Js-Datei von Webpack hinzugefügt wird.

import 'blueimp-javascript-to-blob-for-angular'; 
//how to import so it's useable in any component? 
import 'blueimp-load-image/js/index'; 
import 'core-js/es6'; 
import 'core-js/es6/set'; 
import 'core-js/es7/reflect'; 

require('zone.js/dist/zone'); 

if ('production' !== ENV) { 
    Error['stackTraceLimit'] = Infinity; 
    require('zone.js/dist/long-stack-trace-zone'); 
} 

Wie und wo kann ich importieren meine externe Javascript-Datei (Inhalt unten), bevor zone.js so kann ich in meiner Komponente verwenden Sie es noch?

Bisher war mein Problem, dass ich die externen Bibliotheken Funktionen nicht zugreifen kann, weil sie immer waren. Sie wurden jedoch zu den generierten Javascript-Dateien hinzugefügt.

der gesamte Prozess des Importierens von externem Javascript in ein eckiges 4-Projekt scheint mir sehr kompliziert.

Inhalt der Javascript-Datei:

module.exports = require('./load-image') 

require('./load-image-scale') 
require('./load-image-meta') 
require('./load-image-fetch') 
require('./load-image-exif') 
require('./load-image-exif-map') 
require('./load-image-orientation') 
+0

hatten Sie eine Chance, [meine Lösung] (https://stackoverflow.com/a/45793458/2545680) zu versuchen? –

Antwort

0

Wenn Sie AddAssetHtmlPlugin wie gezeigt verwenden here

/** 
    * Plugin: AddAssetHtmlPlugin 
    * Description: Adds the given JS or CSS file to the files 
    * Webpack knows about, and put it into the list of assets 
    * html-webpack-plugin injects into the generated html. 
    * 
    * See: https://github.com/SimenB/add-asset-html-webpack-plugin 
    */ 
    // new AddAssetHtmlPlugin([ 
    // { filepath: helpers.root(`dll/${DllBundlesPlugin.resolveFile('polyfills')}`) }, 
    // { filepath: helpers.root(`dll/${DllBundlesPlugin.resolveFile('vendor')}`) } 
    // ]), 

Sie müssen eine weitere entry Punkt here erstellen, die externe js-Datei benötigen und laden mit dem AddAssetHtmlPlugin Plugin vor anderen Bündeln.

+0

importieren. Ich habe es gerade ausprobiert. Es funktioniert und fügt die notwendige JS-Datei hinzu (musste SourceMaps nur ausschließen). Aber ehrlich gesagt, in meinen Büchern sollte etwas wie das Importieren einer Js-Datei nicht so schwer sein (ich habe mehrere Stunden damit verbracht, verschiedene Ansätze auszuprobieren). Und während dieser Ansatz funktioniert, denke ich, es ist alles andere als ideal. Wie auch immer, danke. Aber Webpack beschwert sich jetzt in der ersten Zeile der importierten Datei: "Uncaught ReferenceError: Modul ist nicht definiert". – Arikael

+0

Also muss wohl dieses ES6-Modul in etwas übersetzt werden, das der Browser versteht ... oh myyy ... – Arikael

+0

@Arikael, was genau ist schwer? Sie verwenden ein Build-Tool und Sie sollten den Ansatz verwenden, den es unterstützt. Sie benötigen einen neuen Einstiegspunkt, da ESM-Module statisch sind und ausgeführt werden, bevor das Modul ausgeführt wird, das sie importiert. Der letzte Fehler kann wahrscheinlich eine separate Frage sein. Wenn Webpack korrekt konfiguriert ist, wird 'modul' in sein eigenes require-Format transpiliert –

0

Import externe Javascript-Dateien in Ihrer Kopf Bereich von Datei index.html, die der Einstiegspunkt für Ihre Anwendung ist, normale HTML-Script-Tag Beispiel mit:

<script src="https://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script> 
+0

aber dies würde zu einer zusätzlichen Anfrage führen. – Arikael

+0

ja .. aber es lädt die externen Javascript-Dateien nur einmal, wenn die Seite index.html (dh Ihre Anwendung mit einer Seite) in den Browser @Arikael –

+0

geladen ist, gibt es keine Möglichkeit, es direkt in die App aufzunehmen (Import/required etc.?) – Arikael