即使将 node_modules 添加到资产路径后,Sprockets 也找不到 angular.js

Sprockets can't find angular.js even after adding node_modules to asset path

我正在使用 rails 5.0.3

我已将 npm 添加到应用程序根目录下的该项目。

为了将 node_modules 加载到资产管道中,我将以下行添加到 config/initializers/assets.rb

Rails.application.config.assets.paths << Rails.root.join('node_modules')

然后我将 angular 包含在我的 application.js 清单文件中,如下所示:

//= require angular/angular.js
//= require app.js
//= require_tree ./ng/constants
//= require_tree ./ng/services
//= require_tree ./ng/controllers

我尝试了多种变体,例如:

require_directory angular
require_tree angular
require angular/angular.js
require angular

这确实在本地有效,但是当我推送到 heroku 时,它说:

Sprockets::FileNotFound: couldn't find file 'angular/angular.js' with type 'application/javascript'
 ...... [lists all the asset paths Sprockets has searched including node_modules]
/tmp/build_93a7b2eb7cc158c5d30b242da36b56ac/node_modules

当应用程序在 Heroku 中加载资产以进行生产时似乎发生了一些事情,而不是在 运行 本地开发时发生了一些事情,但它是什么?

我还尝试通过包含 config/initializers/assets.rb

中的这一行来预编译清单文件中的所有内容
Rails.application.config.assets.precompile += %w( application.js )

这在 Heroku 中用于生产的方式是首先做:

rake assets:precompile

为什么我必须在推送到 master 之前预编译这些资产?如何使这部分成为默认流程?

我们解决这个问题的方法是安装 webpacker gem 和 运行 rails webpacker:install