Ruby on rails 为什么';t`npm运行包--p`(webpack-p)是否为我的rails应用程序编译资产?

Ruby on rails 为什么';t`npm运行包--p`(webpack-p)是否为我的rails应用程序编译资产?,ruby-on-rails,npm,webpack,service,daemon,Ruby On Rails,Npm,Webpack,Service,Daemon,我创建了这个rails项目()并尝试按照它的 按照安装指南操作时: 1) 在执行以下步骤之前:npm run bundle,网站未正确显示其图像和布局 2) 在执行步骤npm run bundle后,网站将正确显示其图像和布局 3) 在引擎盖下,npm运行包将启动webpack。我在npm run bundle之后按CTRL+C关闭网页包,网站仍然正确显示图像和布局 4) 我运行了npm运行包--p,它应该等于webpack-p,网站不再正确显示图像和布局 为什么npm运行包--p(即webpa

我创建了这个rails项目()并尝试按照它的

按照安装指南操作时:

1) 在执行以下步骤之前:
npm run bundle
,网站未正确显示其图像和布局

2) 在执行步骤
npm run bundle
后,网站将正确显示其图像和布局

3) 在引擎盖下,
npm运行包
将启动webpack。我在
npm run bundle
之后按CTRL+C关闭网页包,网站仍然正确显示图像和布局

4) 我运行了
npm运行包--p
,它应该等于
webpack-p
,网站不再正确显示图像和布局

为什么
npm运行包--p
(即
webpack-p
)没有正确编译资产?我认为它是npm运行包的守护程序版本(即
webpack
),守护程序意味着在后台运行(我认为守护程序与服务相同?)

请纠正我,如果我理解不正确的概念或使用不正确的术语在任何地方


谢谢大家!

回答我自己的问题:

1) 在执行以下步骤之前:
npm run bundle
,网站不会显示其图像 布局合理

资产(图像和css样式表的布局)尚未编译,因此Rails无法使用它,因此布局将不正确,图像将不会显示

您可以在该项目中使用
npm运行包
编译用于开发环境的资产

2) 在执行步骤
npm run bundle
后,网站将显示其图像和 合理布局

见上文

3) 在引擎盖下,
npm运行包
将启动webpack。我关了门 在
npm run bundle
之后按CTRL+C组合键进行网页打包,然后 仍在正确显示图像和布局

我认为webpack(
npm运行包
)就像一个服务器,为他们需要的rails服务器资产提供服务,但事实并非如此

webpack只编译rails使用的资产。运行
npm run bundle
后,webpack之所以继续运行,是因为它不断检测到这些资产文件源的更改,因此当您在网站上发布浏览器刷新时,这些资产文件源的任何更改都会立即反映出来

4) 我运行
npm运行包--p
,它应该等于
webpack-p
, 网站没有正确显示图片和布局 不再 为什么npm运行包--p(即webpack-p)没有编译 资产是否合理

npm运行包--p
在本例中实际上等于
webpack-p

为了理解为什么网站不再正确地显示图像和布局,让我们先看一些东西。当我运行
npm运行包--p
时,会发生以下情况:

modified:   config/initializers/fingerprint.rb

deleted:    public/javascripts/application.js
deleted:    public/javascripts/vendor.js
deleted:    public/stylesheets/application.css

added:      public/javascripts/application-2f49ec37563f77c91204.js
added:      public/javascripts/vendor-2f49ec37563f77c91204.js
added:      public/stylesheets/application-2f49ec37563f77c91204.css
npm运行包--p
将为生产环境编译资产,并将指纹(在本例中为
-2f49ec37563f77c91204
)添加到其输出中

深入研究代码,我们可以看到
app/views/layouts/application.html.erb
包含以下代码:

<%= stylesheet_link_tag fingerprinted_asset('application') %>
<%= javascript_include_tag fingerprinted_asset('vendor') %>
<%= javascript_include_tag fingerprinted_asset('application') %>
我们可以看到,在生产环境中,我们将使用名称中带有指纹的文件,而在非生产环境中,我们将使用名称中没有指纹的文件

在本例中,我在开发环境tn中运行了
rails服务器
,因此我的应用程序尝试查找名称中没有指纹的文件。这意味着:

public/javascripts/application.js
public/javascripts/vendor.js
public/stylesheets/application.css
但是我使用了
npm run bundle--p
,它删除了上面的文件并生成了它们的指纹版本,因此rails找不到它,因此不显示任何图像,也不向我显示不正确的布局

我认为这是npm运行包的守护程序版本 webpack)和daemon意味着在后台运行(我认为daemon是 和服务一样吗?)

它不是npm运行包的守护程序版本。我认为这是npm运行包的守护程序版本,因为他们的wiki曾经这么说,这是错误的,请参阅

public/javascripts/application.js
public/javascripts/vendor.js
public/stylesheets/application.css