不确定 webpacker-rails 中的 application.js 需要什么

unsure of what application.js in webpacker-rails is requiring

我有一个 rails 6 应用

gem 'webpacker', '~> 4.0'
gem 'react-rails'

包含在 gemfile 中,

我有运行rails webpacker:install:reactrails generate react:installyarn install

我注意到我的 javascript/packs 文件夹中有一个 application.js 文件:

// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You're encouraged to place your actual application logic in
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")


// Uncomment to copy all static images under ../images to the output folder and reference
// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)
// or the `imagePath` JavaScript helper below.
//
// const images = require.context('../images', true)
// const imagePath = (name) => images(name, true)

为什么需要那些特定的项目? 为什么有些要求以 @rails 为前缀?

根据您的应用程序,您可以删除部分或全部要求。

  • @rails/ujs 包添加了不引人注目的 JavaScript 功能,例如使用 remote: true 选项对表单进行 ajax 化,以及将 CSRF 令牌添加到 Ajax 请求。
  • turbolinks“使应用程序的导航速度更快。当您关注 link 时,Turbolinks 会自动获取页面,交换其 body 标签并合并其 head 标签,所有这些都不会产生整个页面加载的成本。”如果使用,请谨慎使用并了解权衡 https://github.com/turbolinks/turbolinks/blob/master/README.md
  • 仅当您在后端使用 ActiveStorage 支持文件上传时才需要 @rails/activestorage
  • 仅当您使用 Rails websocket 功能 ActionCable 时才需要 channels

@rails/ 前缀只是给定包名称的一部分,表明它属于某个组织;这通常只是一种避免与可能具有相同名称的其他包发生名称冲突的方法。