如何在Rails中使用npm软件包

Nov*_*ice 6 ruby-on-rails npm ace-editor reactjs react-rails

我试图在我的Ruby on Rails应用程序中使用Ace编辑器,并且大部分视图构成为React组件。我使用的是react-rails宝石,根本不使用助焊剂。

我找到了此react-ace软件包,但必须使用npm进行安装。我已经能够使Bower组件与bower-rails gem一起工作,但从未使用过npm软件包。有没有办法仅通过资产管道(通过供应商)使用此方法?

顺便说一句,我没有使用browserify或ES6,所以我什至没有import。到目前为止,我一直在通过资产管道进行所有操作。

谢谢!

Ger*_*son 7

要使用资产管道将npm软件包包含在rails项目中,请执行以下操作:

  1. 初始化您的package.json:

    npm init

  2. 添加node_modules到您的资产路径:

    module YourApp class Application < Rails::Application config.assets.paths << Rails.root.join('node_modules')

  3. 确保npm install在启动时运行:

    config/initializers/npm.rb

    system 'npm install' if Rails.env.development? || Rails.env.test?

  4. 安装您的软件包:

    npm install YourPackage

  5. 从application.js链接到您的包

    //= require /Path/To/YourPackage

  • @Art713 生产版本应该是确定性的和可重复的。使用 npm install 将从网络获取 JS 资源,如果包不可用或已更新,这可能会导致损坏。对于生产,您应该将 JS 资产捆绑到您的部署中。 (2认同)

Ant*_*y E 1

简而言之,ACE 编辑器是为在 Node.js 而不是 Rails 中运行而构建的,因此没有简单的方法可以做到这一点。请记住,大多数npm包旨在用作在 Node.js 环境上运行的服务器端 JavaScript,并且不能直接在 Ruby 中运行。我相信 Ace Editor 需要 Node.js 后端,并且我怀疑让它在 Rails 后端运行会很简单。

当然,任何在浏览器中运行的 JavaScript 都可以集成到 Rails 资产管道中。为此,我建议查看 Bower,它是最常用的包管理系统 ( http://bower.io )。您可以直接在 Rails 应用程序中安装,但我建议您查看 Bower Rails,以便更好地与 Rails 约定和资产管道集成https://github.com/rharriso/bower-rails

如果您想尝试将与平台无关的 javascript 移植到浏览器,您可以查看 browserify,它只是使用requireNode.js 使用的 CommonJS 格式链接 javascript 文件。然而,它不会神奇地使服务器端 JavaScript 框架(如 Express 或 ACE 编辑器)仅在浏览器中工作。