我分叉了这个rails项目(https://github.com/DMPRoadmap/roadmap),并尝试按照其installation guide
进行设置遵循安装指南时:
1)在执行步骤npm run bundle
之前,网站无法正确显示其图像和布局
2)在执行npm run bundle
步骤之后,网站正确显示了其图像和布局
3)在后台,npm run bundle
将启动webpack。我在npm run bundle
之后按CTRL + C关闭了Webpack,该网站仍在正确显示图像和布局。
4)我运行npm run bundle -- -p
,该值应等于webpack -p
,并且该网站无法再正确显示图像和布局。
npm run bundle -- -p
(webpack -p
)为什么不能正确编译资产?我以为它是npm run bundle
的守护程序版本(即webpack
),守护程序意味着在后台运行(我认为守护程序与服务相同吗?)?
如果我不正确地理解该概念或在任何地方错误地使用该术语,请纠正我。
谢谢!
答案 0 :(得分:0)
回答我自己的问题:
1)在执行步骤
npm run bundle
之前,网站未显示其图片 并正确布局
资产(图像和css样式表的布局)尚未编译,因此Rails无法使用它,因此布局将不正确并且图像将不会显示。
您可以在此项目中使用npm run bundle
来为开发环境编译资产。
2)在步骤
npm run bundle
之后,网站显示其图像, 正确布置
见上文。
3)在后台,
npm run bundle
将启动webpack。我关闭 在npm run bundle
之后按CTRL + C组合键进行Webpack,然后访问该网站 仍能正确显示图像和布局。
我认为webpack(npm run bundle
)的作用就像一台服务器,为所需的Rails服务器资产提供服务,但实际上并非如此。
webpack仅编译资产以供Rails使用。运行npm run bundle
后webpack继续运行的原因是,它不断检测到资产文件源的更改,因此,当您发出浏览器刷新时,这些资产文件源的任何更改将立即反映出来。在网站上。
4)我运行
npm run bundle -- -p
,该值应等于webpack -p
, 并且网站无法正确显示图像和布局 不再。 为什么npm run bundle--p(webpack -p)不编译 资产正确?
npm run bundle -- -p
实际上等于webpack -p
。
要了解为什么网站无法再正确显示图像和布局,让我们先来看一下。当我运行npm run bundle -- 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 run bundle -- -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') %>
看看fingerprinted_asset()
中的app/helpers/application_helper.rb
方法,我们可以看到:
def fingerprinted_asset(name)
Rails.env.production? ? "#{name}-#{ASSET_FINGERPRINT}" : name
end
我们可以看到,在生产环境中,我们将使用带指纹的文件名;在非生产环境中,我们将使用带指纹的文件名。
在这种情况下,我正在开发环境中运行rails server
,因此我的应用程序尝试查找名称中没有指纹的文件。这意味着这些:
public/javascripts/application.js
public/javascripts/vendor.js
public/stylesheets/application.css
但是我使用npm run bundle -- -p
,它删除了上面的文件并生成了它们的指纹版本,因此Rails找不到它,因此不显示任何图像并向我显示错误的布局。
我认为它是
npm run bundle
的守护程序版本( webpack)和守护进程意味着在后台运行(我认为守护进程是 和服务一样?)?
它不是npm run bundle
的守护程序版本。我认为这是npm run bundle
的守护程序版本,因为他们的Wiki过去常常说错了,请参见https://github.com/DMPRoadmap/roadmap/issues/1782。