Ruby on rails 为什么';t`npm运行包--p`(webpack-p)是否为我的rails应用程序编译资产?
我创建了这个rails项目()并尝试按照它的 按照安装指南操作时: 1) 在执行以下步骤之前: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
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