fny*_*fny 3 ruby-on-rails typescript webpack
我正在用Webpacker v2运行Rails v5。到目前为止,一切都还很顺利,但是我遇到了一个麻烦:如何将Rails助手公开给我的TypeScript。
我知道Webpacker随rails-erb-loader一起提供,所以我期望能够添加.erb到TypeScript文件,然后将该文件导入其他地方:
// 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"
Run Code Online (Sandbox Code Playgroud)
但是,即使我将打字稿加载程序修改为包括ERB文件,Webpack也找不到“ rails”文件:
module.exports = {
test: /.ts(\.erb)?$/,
loader: 'ts-loader'
}
Run Code Online (Sandbox Code Playgroud)
我所看到的是:
error TS2307: Cannot find module '../utils/rails'.
Run Code Online (Sandbox Code Playgroud)
将Rails帮助器和变量暴露给我的JavaScript的最佳方法是什么?
Rails env来自您的环境变量。这意味着您可以通过以下方式(例如在bash中)设置变量来配置它:
export RAILS_ENV=production
Run Code Online (Sandbox Code Playgroud)
因此,您根本不需要处理Rails。
// app/javascript/utils/rails.ts.erb
export const env = process.env.RAILS_ENV || "development"
export function isEnv(envName: string) {
return env == envName
}
Run Code Online (Sandbox Code Playgroud)
这具有很大的优势:您不必为了编译javascript而加载整个rails应用程序。如果您的应用不断增长,Rails在首次加载时可能会变得非常缓慢。
由于您将无法访问process.env前端(浏览器),因此还需要一种使它存在的方法。在webpack中,这是通过以下方式完成的DefinePlugin:
更新Webpack配置以使用插件(在plugins部分中):new webpack.DefinePlugin({ "process.env": { RAILS_ENV: process.env.RAILS_ENV } })您将process.env.RAILS_ENV在客户端中获得可用的插件
| 归档时间: |
|
| 查看次数: |
1466 次 |
| 最近记录: |