首页 文章

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

提问于
浏览
0

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

纱线添加时刻

EDIT2:

这是我的导入

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

Problem: I can't use the "moment" package in my old JS asset files

第一个工作,另一个不工作:

# 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安装过程的关键点:

宝石文件

  • gem 'webpacker', github: 'rails/webpacker'

  • 将此行添加到assets.rb: Rails.application.config.assets.paths << Rails.root.join('node_modules')

  • 在application.html.haml的%head中添加: = javascript_pack_tag 'application'

  • 重启Rails服务器并启动webpacker

注意:我将我的应用程序从Rails 4.2升级到5.0以及之后升级到5.1;也许我的应用程序中缺少某些东西

2 回答

  • 0

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

    import moment from 'moment'
    
    window.moment = moment
    
  • 2

    首先我认为这是一个解决方案,但事实并非如此: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'
    

    =>仍然是错误

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

    资产管道发生了什么变化?长话短说:没什么 . 您仍然可以像往常一样使用资产管道 - “如果您喜欢资产管道,那么您可以保留资产管道” . 这包括javascripts /目录 . 您甚至可以在视图中将打包文件与“流水线”文件混合在一起 . 您只是不能将打包的文件包含在“流水线”文件中;好吧,不容易 .

    看来我不能把“时刻”包与“旧”资产JS(?)混在一起

相关问题