Ich habe eine Vue-Komponente in meiner Anwendung Laravel.
Ich möchte eine URL, die sich in einer config-Datei (oder in der .env Laravel -Datei) befindet, direkt in meiner Vue-Komponente abrufen, anstatt sie fest zu kodieren. Im Webpack-Laravel-Mix kann ich meine abrufen. Env-Variable wie diese.
require('dotenv').config()
let proxyUrl = process.env.APP_URL
Aber wenn ich dies in meiner app.js machen möchte, habe ich einen can't resolve fs
, wenn ich versuche, dotenv zu benötigen.
Was ist der beste Weg, um diese Daten in meinen Vue-Komponenten zur Verfügung zu haben?
Ich hatte das gleiche Problem, aber das Platzieren der Variablen in Blade war keine Option für mich, es bedeutete auch, eine Variable in einer Blade-Datei zu deklarieren und dann in einer Javascript-Datei zu verwenden, die ein wenig unorganisiert erscheint. Wenn Sie also in dieser Position sind, denke ich, gibt es eine bessere Lösung. Wenn Sie Vue verwenden, kompilieren Sie Ihre Dateien wahrscheinlich mit Laravel mix.
Wenn dies der Fall ist, können Sie Umgebungsvariablen in Mix einfügen. Sie müssen lediglich das Präfix MIX_ hinzufügen. So können Sie Ihrer .env-Datei eine Variable hinzufügen wie:
MIX_SENTRY_DSN_PUBLIC=http://example.com
und greifen Sie dann in Ihrer Javascript-Datei auf diese Variable zu:
process.env.MIX_SENTRY_DSN_PUBLIC
sie können darauf überall in Ihrer Pre-Compile-Datei zugreifen. Sie finden diese Informationen in der Laravel-Dokumentation. https://laravel.com/docs/5.6/mix#environment-variables
Um auf Ihre Env-Variablen in einer Vue Component-Datei in Laravel zuzugreifen, müssen Sie Ihrer Variablen MIX_ voranstellen.
Beispiel: Wenn Sie APP_URL als Variable in Ihrer .env-Datei anstelle von APP_URL verwenden möchten, sollten Sie MIX_APP_URL like verwenden :
MIX_APP_URL=http://example.com
Sie greifen dann auf die Variable zu, indem Sie das process.env -Objekt in Ihrem Skript wie folgt verwenden:
process.env.MIX_APP_URL
Angenommen, Sie setzen heute eine Eigenschaft mit dem Namen proxyUrl und weisen die Variable als Wert zu. In Ihrem Skript in der .vue-Datei sollte der Code folgendermaßen aussehen:
export default {
data () {
return {
proxyUrl: process.env.MIX_APP_URL,
},
}
}
Danach sollten Sie die Eigenschaft in der Vue-Vorlage wie gewohnt abrufen können:
<template>
<div>
//To print the value out
<p>{{proxyUrl}}</p>
// To access proxyUrl and bind it to an attribute
<div :url='proxyUrl'>Example as an attribute</div>
</div>
</template>
Hier ist das offizielle Dokument, das in Laravel 5.6 veröffentlicht wurde, falls Sie einen Blick darauf werfen möchten.
Sie können dies in der Blade-Vorlage tun:
let window.something = {{ config('seme_config.something') }}
Dann verwenden Sie einfach die Variable in JS mit:
window.something
Außerdem sollten Sie den env()
Helper nicht direkt verwenden. Extrahieren Sie nur Daten aus der Konfigurationsdatei.
WICHTIG
Sie müssen das Bundle erneut laden, damit die Änderungen wirksam werden.
Meins funktionierte nicht, bis ich das Dev-Bundle getötet und npm run watch
erneut ausgeführt habe.