代码之家  ›  专栏  ›  技术社区  ›  fny

将Rails Env公开给Webpacker

  •  7
  • fny  · 技术社区  · 7 年前

    我正在用Webpacker v2运行Rails v5。到目前为止,一切都很顺利,但我遇到了一个小问题:如何将Rails助手暴露到我的TypeScript中。

    .erb ,然后将该文件导入其他位置:

    // app/javascript/utils/rails.ts.erb
    export const env = "<%= Rails.env %>"
    
    export function isEnv(envName: string) {
      return env == envName
    }
    
    // app/javascript/packs/application.ts
    import { env } from "../utils/rails"
    

    module.exports = {
      test: /.ts(\.erb)?$/,
      loader: 'ts-loader'
    }
    

    我所看到的是:

    error TS2307: Cannot find module '../utils/rails'.
    

    2 回复  |  直到 7 年前
        1
  •  6
  •   Francesco Belladonna    7 年前

    Rails env来自您的环境变量。这意味着您可以通过以下方式设置(例如在bash中)变量来配置它:

    export RAILS_ENV=production
    

    因此,您根本不需要处理Rails。

    // app/javascript/utils/rails.ts.erb
    export const env = process.env.RAILS_ENV || "development"
    
    export function isEnv(envName: string) {
      return env == envName
    }
    

    你不需要加载整个rails应用程序来编译javascript .如果你的应用程序增长,Rails在第一次加载时会变得非常慢。

    因为你无法访问 process.env 在前端(浏览器),您还需要一种方法来实现它 存在 DefinePlugin :

    plugins 章节): new webpack.DefinePlugin({ "process.env": { RAILS_ENV: process.env.RAILS_ENV } }) process.env.RAILS_ENV 在客户端可用

        2
  •  4
  •   Jeremy Lynch    6 年前

    Rails Env可以通过以下方式访问:

    process.env.RAILS_ENV