2

在 Ruby on Rails 应用程序中,我们如何才能require或不是通过or而是通过import安装的包?npmyarnbundle

我试过了:

//= require package-name

但这似乎不适用于webpacker.

require("package-name")也不起作用(因为在 中找不到它node_modules)。

4

2 回答 2

1

对于普通的 Rails 环境,如果需要一些文件,可以使用普通的目录路径。

假设您的资产文件夹如下所示

├── application.js
└── something.js

你想要求something.js那么你只需要写

//= require ./something.js

给你的application.js

对于您手动放置在某处的包,您必须将包的位置添加到Rails.application.config.assets.paths

如果您使用的是 Rails v5,您可以查看config/initializers/assets.rb加载的node_modules神奇之处

于 2017-12-06T08:02:04.670 回答
0

我没有 webpack 经验,也没有解决您的问题的方法。

那这个呢

https://webpack.js.org/loaders/bundle-loader/

正如我在文档路径一章中所读到的

路径

默认情况下,Webpacker 附带了简单的约定,即 JavaScript 应用程序文件和编译的 webpack 包在 Rails 应用程序中的位置,但所有这些选项都可以从 file.configconfig/webpacker.yml文件中配置。

默认情况下 webpack 应该编译的配置依赖于约定,即(默认)中的每个文件或您在配置中app/javascript/packs/*设置的任何路径都将转换为它们自己的输出文件(或入口点,如 webpack 所说)。因此,您不想在 packs 目录中放入任何您不想成为入口文件的内容。根据经验,将所有要在视图中链接的文件放在“packs”目录中,并将其他所有文件放在.source_entry_pathwebpacker.ymlapp/javascript

假设您要将源目录从更改app/javascript为 frontend 并输出到assets/packs. 你会这样做:

# config/webpacker.yml
source_path: frontend
source_entry_path: packs

public_output_path: assets/packs# 输出到 => public/assets/packs 类似地,你也可以从 config/webpacker.yml 文件中控制和配置 webpack-dev-server 设置:

# config/webpacker.yml
development:
  dev_server:
    host: localhost
    port: 3035

如果您将 hmr 设置为 true,则 stylesheet_pack_tag 不会生成任何输出,因为您需要将样式配置为内联在 JavaScript 中以进行热重载。在生产和测试期间,stylesheet_pack_tag 将创建适当的 HTML 标签。

资产管道从定义的路径加载文件Rails.application.config.assets.paths

这是我的输出rails console

["/home/fabrizio/Documents/Sublime/Rails/surfcheck/app/assets/config",
 "/home/fabrizio/Documents/Sublime/Rails/surfcheck/app/assets/images",
 "/home/fabrizio/Documents/Sublime/Rails/surfcheck/app/assets/javascripts",
 "/home/fabrizio/Documents/Sublime/Rails/surfcheck/app/assets/stylesheets",
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/font-awesome-rails-4.7.0.2/app/assets/fonts",
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/font-awesome-rails-4.7.0.2/app/assets/stylesheets",
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/jquery-rails-4.3.1/vendor/assets/javascripts",
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/coffee-rails-4.2.2/lib/assets/javascripts",
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/actioncable-5.1.4/lib/assets/compiled",
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/actionview-5.1.4/lib/assets/compiled",
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/turbolinks-source-5.0.3/lib/assets/javascripts",
 #<Pathname:/home/fabrizio/Documents/Sublime/Rails/surfcheck/node_modules>,
 #<Pathname:/home/fabrizio/Documents/Sublime/Rails/surfcheck/vendor>,
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bootstrap-sass-3.3.7/assets/stylesheets",
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bootstrap-sass-3.3.7/assets/javascripts",
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bootstrap-sass-3.3.7/assets/fonts",
 "/home/fabrizio/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bootstrap-sass-3.3.7/assets/images"]

当您requireapplication.jsor中执行 a 时application.scsssprockets将使用 rubyrequire​​ 语句在预定义的路径中搜索该文件。

如果是 GEM,它会在.rbenv/version/yourversion文件夹中找到它。

我解决此问题的方法是将前端应用程序所需的 gem 中的那些文件包含在正确的文件夹中,因此只需从 GEM 访问存储库并将这些文件复制粘贴到正确的位置。

我知道这不能解决您的问题,但我只是想帮助您。

再见法布里齐奥

于 2017-12-06T07:50:31.547 回答