【问题标题】:Uncaught ReferenceError: process is not defined - React-Rails未捕获的 ReferenceError:未定义进程 - React-Rails
【发布时间】:2019-11-05 05:16:52
【问题描述】:

由于 Uncaught ReferenceError 错误,组件未呈现。该错误在 React API 文件之一中引发(请参阅下面有问题的代码)。我正在使用 react-rails gem 并尝试渲染一个名为“Test”的空白组件。

来自 React API 的文件(第 3 行)

 'use strict';

 if (process.env.NODE_ENV === 'production') {
  module.exports = require('./cjs/react.production.min.js');
 } else {
  module.exports = require('./cjs/react.development.js');
 }

ERB 渲染组件

<div style="width:100vw">
  <%= react_component('Test') %>
</div>

组件

import React from "react";
import PropTypes from "prop-types";

export default class Test extends React.Component{

  render(){
    return (
      <div>
        test
      </div>
    )
  }
}

React API 应该将“测试”呈现给 (v)dom。

【问题讨论】:

  • 您有.env 文件吗?您如何导出/加载环境变量?
  • @Yeysides 我也面临同样的问题?它与 .env 文件有什么关系吗?我没有这样的文件。
  • @KrupaSuthar 如果您想使用process.env 变量,您需要在项目的根目录下创建一个.env 文件,并通过在文件上运行源来导出您的环境变量,如果没有,您需要在每个进程中手动导出这些变量。
  • 但我没有在那里手动添加。我正在使用github.com/reactjs/react-rails gem
  • @KrupaSuthar 看起来 react-rails 使用了webpacker,看看here

标签: reactjs webpack react-rails


【解决方案1】:

React-rails gem 使用webpacker,所以我会按照他们的文档来确保你正确地获取环境变量,特别是如果你不使用 webpack-dev-server 涉及到设置 dotenv 文件的部分:

Webpacker 开箱即用地支持环境变量。为了 例如,如果你像这样运行 webpack 开发服务器:

FOO=hello BAR=world ./bin/webpack-dev-server

然后您可以使用 process.env 在您的 JavaScript 应用代码中引用这些变量:

console.log(process.env.FOO) // Compiles to console.log("hello")

您可能希望通过 .env 文件将配置存储在环境变量中,类似于 dotenv Ruby gem。

以下是支持“类 Ruby”dotenv 的方法:

yarn add dotenv

// config/webpack/environment.js

...
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
const dotenv = require('dotenv')

const dotenvFiles = [
  `.env.${process.env.NODE_ENV}.local`,
  '.env.local',
  `.env.${process.env.NODE_ENV}`,
  '.env'
]
dotenvFiles.forEach((dotenvFile) => {
  dotenv.config({ path: dotenvFile, silent: true })
})

environment.plugins.prepend('Environment', new webpack.EnvironmentPlugin(JSON.parse(JSON.stringify(process.env))))

module.exports = environment

如果您想将自定义变量传递给按需编译器,请使用Webpacker::Compiler.env 属性。

Webpacker::Compiler.env['FRONTEND_API_KEY'] = 'your_secret_key'

【讨论】:

  • 对于迟到的回复,我深表歉意。我应用了您建议的修复程序,但无济于事。对于这个“进程”对象的加载位置(我假设反应)以及为什么在开发过程中没有创建它,我有点迷茫。
  • @iThompkins 你最初是如何设置你的 react 应用的?你是用create-react-app还是别的什么?
  • @Yeysides 我有同样的问题,我没有创建仅反应的应用程序,但我使用github.com/reactjs/react-rails 来创建具有反应和轨道的应用程序,这就是我首先创建轨道应用程序然后添加这个的原因宝石
  • @KrupaSuthar 尝试使用 this 加载您的环境文件
猜你喜欢
  • 1970-01-01
  • 2022-07-18
  • 2016-05-22
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2021-03-09
相关资源
最近更新 更多