14

我正在尝试在我的 Ruby on Rails 应用程序中使用Ace 编辑器,其中大部分视图由 React 组件组成。我正在使用react-rails gem,我根本没有使用通量。

我找到了这个react-ace包,但是我必须使用 npm 来安装它。我已经能够让 bower 组件与 bower-rails gem 一起工作,但从来没有让 npm 包工作。有没有办法通过资产管道(通过供应商)使用它?

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

谢谢!

4

3 回答 3

21

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

  1. 初始化你的 package.json:npm init

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

# config/application.rb
module YourApp
 class Application < Rails::Application
   config.assets.paths << Rails.root.join('node_modules')
 end
end

  1. npm install通过添加初始化程序确保在启动时运行:
# config/initializers/npm.rb
system 'npm install' if Rails.env.development? || Rails.env.test?
  1. 安装你的包:npm install YourPackage

  2. 从以下链接到您的包裹app/assets/javascripts/application.js

//= require /Path/To/YourPackage
于 2018-08-07T00:31:46.700 回答
2

Rails 5.1 支持包含使用 Yarn 的 npm 包。

例如,假设我们要使用 moment.js 库。我们首先需要使用 Yarn 安装库:

yarn add moment

我们可以看到 package.json 已更新:

{
  "name": "yarn_test",
  "private": true,
  "dependencies": {
    "moment": "^2.18.1"
  }
}

最后,我们需要将新包包含到 application.js 中:

//= require moment/moment

请参阅Rails 5.1 及更高版本 - 第 1 部分:Yarn on Rails

于 2021-09-10T22:15:01.907 回答
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 文件。但是,它不会神奇地使 Express 或 ACE Editor 等服务器端 JavaScript 框架仅在浏览器中工作。

于 2016-04-13T16:18:05.487 回答