[英]Why doesn't `npm run bundle — -p` (webpack -p) compile the asset for my rails app?
我分叉了這個Rails項目( https://github.com/DMPRoadmap/roadmap ),並嘗試按照其安裝指南進行設置
遵循安裝指南時:
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
),而守護程序意味着在后台運行(我認為daemon與service相同?)?
如果我對這個概念的理解不正確或在任何地方使用不正確,請更正我。
謝謝!
回答我自己的問題:
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
實際上等於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') %>
查看app/helpers/application_helper.rb
中的fingerprinted_asset()
方法,我們可以看到:
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),守護程序意味着在后台運行(我認為daemon與服務相同嗎?)?
它不是npm run bundle
的守護程序版本。 我認為這是npm run bundle
的守護程序版本,因為他們的Wiki經常這樣說,這是錯誤的,請參閱https://github.com/DMPRoadmap/roadmap/issues/1782 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.