Rails 5.1 Webpacker - 通过yarn添加了moment.js - 如何在旧资产JS中使用包

时间:2017-07-26 21:14:13

标签: javascript ruby-on-rails webpacker

我是webpacker和yarn的新手。我成功安装了包:

  

纱线添加时刻

EDIT2:

这是我的导入

# app/javascript/packs/application.js
import moment from 'moment/moment'
import 'moment/locale/de-ch'

问题:我无法使用"时刻"在我的旧JS资产文件中打包

首先工作,另一个不工作:

# in: app/javascript/packs/application.js
console.log('Log: ' + moment([2007, 0, 29]).toNow()) #=> Log: in 10 Jahren

# in app/*assets*/javascripts/application.js
console.log('Log2: ' + moment([2007, 0, 29]).toNow()) #=> Uncaught ReferenceError: moment is not defined

EDIT1:

这里是webpacker安装过程的关键点:

  1. 在gemfile中: gem' webpacker',github:' rails / webpacker'
  2. 将此行添加到assets.rb: Rails.application.config.assets.paths<< Rails.root.join(' node_modules&#39)
  3. 在application.html.haml中添加%head: = javascript_pack_tag' application'
  4. 重新启动Rails服务器并启动webpacker
  5. 注意:我将我的应用程序从Rails 4.2升级到5.0以及之后升级到5.1;也许我的应用程序中缺少某些东西

2 个答案:

答案 0 :(得分:2)

我有一个类似的问题,即在整个app / assets / javascript文件中使用了momentjs,它是通过gem包含的(实际上,更糟糕的是,rails-assets)。看起来我们都需要在全球范围内提供时刻对象,而不仅仅是在包内。所以,以下修正了我和我将保持它,直到我摆脱app / assets / javascript文件。

import moment from 'moment'

window.moment = moment

答案 1 :(得分:0)

首先我认为这是一个解决方案,但它不是:https://github.com/rails/webpacker#resolved-paths

在“/config/webpacker.yml”中我添加了这个:

# /config/webpacker.yml    
resolved_paths: ['app/assets']

在这里我导入了使用“moment.js”的文件:

# /app/javascript/packs/application.js
import 'javascripts/<folder>/<some_file_uses_moment>.coffee'

=&GT;还是错误

后来我写了这篇文章: http://samuelmullen.com/articles/embracing-change-rails51-adopts-yarn-webpack-and-the-js-ecosystem/

  

资产管道发生了什么变化?长话短说:没什么。您   仍然可以像往常一样使用资产管道 - “如果你   就像你的资产管道一样,你可以保持你的资产管道“。那   包括javascripts /目录。您甚至可以混合打包文件   在您的视图中使用“pipelined”文件。 你不能包括你的   将打包的文件放入“流水线”文件中;好吧,不容易。

似乎我不能将“时刻”包与“旧”资产JS(?)

混合在一起