如何访问javascript中的laravel.env变量?

jtoj6r0c  于 2023-02-20  发布在  Java
关注(0)|答案(8)|浏览(208)

我目前在Laravel应用程序中使用Algolia作为我的搜索引擎,因此每当创建记录时,它也会发送到Agolia数据库。当然,我希望将Algolia数据库中的数据与本地开发的测试集和实时网站的生产集分开。我已经定义了JavaScript文件中使用的Algolia数据库的索引。
现在我想知道如何根据当前的环境对APP_ENV变量做出相应的React来更改它?显然我需要在JavaScript中的if语句中放入内容,但如何使JavaScript正确访问.env变量?
希望有人能帮我。
干杯。

f0brbegy

f0brbegy1#

您可以在视图中将env变量作为javascript字符串回显:

<script>

var name = '{{ env('NAME') }}';

alert(name);

</script>

您的.env文件将如下所示:
姓名=亚历克斯

tuwxkamq

tuwxkamq2#

如文档所示:你可以通过在你的.env文件中用MIX_作为前缀来使用env变量。
例如:MIX_SENTRY_DSN_PUBLIC=http://example.com
.env文件中定义变量后,可以使用process.env对象从javascript文件访问该变量。
例如:process.env.MIX_SENTRY_DSN_PUBLIC

yacmzcpb

yacmzcpb3#

如果从主js文件外部访问env变量,可以执行以下操作:

let mix = require('laravel-mix');
require('dotenv').config();

然后:

let my_env_var = process.env.MY_ENV_VAR;

需要混合和dotenv配置给你访问权限。:)

zi8p0yeb

zi8p0yeb4#

有很多方法。
最好的方法之一是将数据从Controller传递到视图:

if ($app->environment('local'))
{
    // Here you can generate some <script></script> code or you could just generate
    // hidden div like <div id="environment" style="display:none">local</div>

}

或者像这样:

return view('myView')->with('env', $app->environment());

或者您可以使用会话:

\Session::put('env', $app->environment())

当然,您可以创建专用路由并使用Ajax获取它,但我不认为这是在现实生活中的Web应用程序中实现此目的的好方法。

e7arh2l6

e7arh2l65#

首先,确保你可以访问你的env文件里面的PHP文件或刀片文件,你可以查看这个答案https://stackoverflow.com/a/60790227/13012364
然后,如果你的javascript文件与你的blade文件分离,你可以使用window对象来放置你的env值,例如

window.APP_URL = `{{ config('app.APP_URL') }}`;

之后,您可以使用window对象访问javascript文件中的env值

const app_url = window.APP_URL;
cu6pst1q

cu6pst1q6#

一个更干净的解决方案是使用laracasts/utilities包将变量发送到文件。
使用composer require laracasts/utilities命令安装它。
然后在控制器顶部添加use JavaScript;
最后将变量发送如下:JavaScript::put([ 'foo' => $bar ]);.

3zwtqj6y

3zwtqj6y7#

如果你使用vite,它使用dotenv来加载额外的ENV变量,也就是说如果你在.env中使用VITE_作为前缀,你可以在js中使用它:

console.log(import.meta.env.VITE_SOME_KEY);

示例:
.env中:

MEILISEARCH_HOST=http://localhost:7700
VITE_MEILISEARCH_HOST=$MEILISEARCH_HOST # reusing the variable

在JS中:

console.log(import.meta.env.VITE_MEILISEARCH_HOST); 
// ouputs: 'http://localhost:7700'

console.log(import.meta.env.MEILISEARCH_HOST); 
// outputs: undefined, so all your other .env vars are safe

有关详细信息,请访问Env Variables and Modes@www.example.comvitejs.dev

wsxa1bj1

wsxa1bj18#

要在JavaScript代码中访问Laravel应用程序的.env文件中定义的环境变量,您可以在Node.js环境中使用process.env对象。但是,由于您在浏览器环境中使用Algolia,因此需要将环境变量公开给客户端JavaScript。
实现这一点的一种方法是在包含环境变量的blade文件中创建一个全局JavaScript对象。
在.env文件中,为测试和生产环境定义两个不同的Algolia应用程序ID和API密钥:

ALGOLIA_APP_ID_TEST=your_test_app_id
ALGOLIA_API_KEY_TEST=your_test_api_key

ALGOLIA_APP_ID_PROD=your_prod_app_id
ALGOLIA_API_KEY_PROD=your_prod_api_key

在Laravel blade文件中,您可以定义一个全局JavaScript对象,其中包含如下所示的环境变量:

<script>
    window.ALGOLIA_APP_ID = '{{ env("APP_ENV") === "production" ? env("ALGOLIA_APP_ID_PROD") : env("ALGOLIA_APP_ID_TEST") }}';
    window.ALGOLIA_API_KEY = '{{ env("APP_ENV") === "production" ? env("ALGOLIA_API_KEY_PROD") : env("ALGOLIA_API_KEY_TEST") }}';
</script>

这将创建一个window.ALGOLIA_APP_ID和window.ALGOLIA_API_KEY全局变量,您可以在JavaScript代码中访问这些变量。然后,您可以使用这些变量初始化您的Algolia客户端对象,并根据环境选择适当的索引。

const client = algoliasearch(window.ALGOLIA_APP_ID, window.ALGOLIA_API_KEY);
const indexName = (process.env.NODE_ENV === 'production') ? 'prod_index' : 'test_index';
const index = client.initIndex(indexName);

此代码将根据当前环境使用适当的Algolia应用程序ID和API密钥,并为该环境选择适当的索引。
希望这能帮上忙。

相关问题