首页 > 解决方案 > rails资产管道javascript“SyntaxError:意外的令牌导出”

问题描述

我有一个可爱的 topojson 库在本地的 Rails 应用程序中为我工作:

https://github.com/topojson/topojson

它允许我们在谷歌地图中显示一些不错的 geoJSON,如下所示:

生产模式下的开发机器 - 一切都好

我用暴露的 map.js 文件来展示它,因为当我们部署到 heroku 时,这似乎是问题所在。在 heroku 上,map.js 文件在 chrome 上出现错误:

maps-....js:27 Uncaught SyntaxError: Unexpected token export

和Firefox上的类似错误(尽管在不同的行):

SyntaxError:导出声明​​只能出现在模块映射的顶层-...js:1

在heroku上部署相同系统时涉及导出的语法错误

我一直在联系 heroku 支持,他们建议锁定我们的 npm 版本,因为看起来缩小的 js 文件在本地的内容与在 heroku 上的内容略有不同。我注意到我已经尽我所能在本地复制生产模式,破坏和重新编译静态资产等并像这样运行:

RAILS_SERVE_STATIC_FILES=true DEVISE_SECRET_KEY=1234 AIRBRAKE_PROJECT_ID=1234 RAILS_ENV=production bundle exec rails s

但尽我所能,我无法在我的开发机器上复制这个问题。

您可以在此 PR https://github.com/AgileVentures/LocalSupport/pull/1069中看到所有血淋淋的细节, 我想知道是否有人对我的开发机器和 heroku 之间可能存在的差异有任何想法会导致 javascript 文件以不同方式编译吗?在heroku上,我们有以下内容:

export*from"topojson-client";export*from"topojson-server";export*from"topojson-simplify

但是在本地编译的静态资产中没有提到有问题的export关键字,但是它们在 heroku 服务器上的文件中。我一直在尝试各种方法来确保我正在删除缓存文件,并且我所做的更改在本地和 heroku 上都得到了反映。

我也一直在研究尝试和处理 export 关键字(es6 中的新功能)的方法,但这似乎是一个更深的兔子洞,即 sprockets 4 或 webpack 或类似的。

无论如何,如果有人对其他可能导致 heroku 在这里以不同方式运行的事情有任何想法,我很想听听他们的意见,所以我可以将它们锁定或研究如何在本地复制错误。

提前谢谢了

标签: javascriptruby-on-railsnode.jsheroku

解决方案


Heroku 支持说这里的问题是将 npm 与资产管道一起使用,更好的方法是使用 webpacker


推荐阅读