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


How to access the laravel .env variables inside javascript?

我目前在Laravel应用程序中使用Algolia作为搜索引擎,因此无论何时创建记录,都会将其发送到Agolia数据库。当然,我想把我在Algolia数据库中的数据与本地开发的测试集和现场网站的生产集分开。我已经定义了我的Algolia数据库的哪些索引正在JavaScript文件中使用。

现在我想知道我如何对我的APP_ENV变量做出相应的反应,以根据我当前的环境进行更改?显然,我需要将内容放入JavaScript中的if语句中,但如何使JavaScript正确访问.env变量呢?

希望有人能帮我。

干杯。

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

<script>
var name = '{{ env('NAME') }}';
alert(name);
</script>

你的.env文件看起来是这样的:

名称=Alex

正如文档所示:您可以使用env变量,方法是在.env文件中使用MIX_作为前缀。

例如:MIX_SENTRY_DSN_PUBLIC=http://example.com

.env文件中定义变量后,可以从带有process.env对象的javascript文件中访问该变量。

例如:process.env.MIX_SENTRY_DSN_PUBLIC

如果从主js文件外部访问env-vars。您可以执行以下操作:

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

然后:

let my_env_var = process.env.MY_ENV_VAR;

需要mix和dotenv配置即可访问。:(

如果使用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

更多信息可以在环境变量和模式@vitejs.dev 中找到

有很多方法。

最好的方法之一是将数据从控制器传递到视图:

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应用程序中这样做不是一个好方法。

一个更干净的解决方案是使用laracasts/utilities包将变量发送到文件中。

使用composer require laracasts/utilities命令进行安装。

然后在控制器顶部添加use JavaScript;

最后以这种方式发送您的变量:JavaScript::put([ 'foo' => $bar ]);

首先,确保您可以访问PHP文件或刀片文件中的env文件,您可以查看此答案https://stackoverflow.com/a/60790227/13012364

然后,如果您的javascript文件与刀片文件分开,您可以使用window对象来放置您的env值,例如

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

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

const app_url = window.APP_URL;