簡體   English   中英

為什么`npm run bundle--p`(webpack -p)不為我的Rails應用程序編譯資產?

[英]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 -- -pwebpack -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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM