如何在使用Propshaft的Rails 7项目中为JS库传入NODE_ENV
解决Rails 7中Importmap加载tippy.js时process未定义的问题
浏览器环境本身没有Node.js的process对象,tippy.js依赖这个变量判断运行环境,不用Gulp或Rollup也能搞定,直接在全局模拟出process.env.NODE_ENV即可:
方法一:单独创建shim文件
- 在
app/javascript目录下新建process_shim.js,写入以下代码:
这里直接用Rails内置的window.process = { env: { NODE_ENV: Rails.env === 'production' ? 'production' : 'development' } };Rails.env匹配NODE_ENV的环境值,自动对应开发/生产环境。 - 在
app/javascript/application.js的最顶部导入这个shim,确保在tippy.js之前加载:import './process_shim' import 'tippy.js' // 其他导入或业务代码...
- 在
方法二:直接在application.js开头定义
不想多建文件的话,直接在application.js所有导入语句之前加这段代码:// 先全局定义process对象 window.process = { env: { NODE_ENV: Rails.env === 'production' ? 'production' : 'development' } }; import 'tippy.js' // 后续代码...
做完之后重启Rails服务器,刷新页面,tippy.js就能正常识别process.env.NODE_ENV,不会再抛出"process is not defined"的错误了。
内容的提问来源于stack exchange,提问作者fagiani
相关产品推荐
相关产品推荐

