即使将 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
我正在使用 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