2017-05-23 28 views
1

我正在尋找一種方法讓PhpStorm觀看文件 - 以便每次更改時,都應該將該文件同步到遠程服務器。 「上傳外部更改」選項(使用「顯式保存操作」)爲而不是爲我工作。它很近 - 但沒有雪茄。它使我保存了兩次css文件 - 只有在第二次保存scss文件後,纔會上傳gulp-compiled-style.css文件,因爲我希望它在第一次「保存」後執行, 。我知道這是一件微不足道的事 - 但對於我每天輕鬆做200-400次的事情,我希望它儘可能順利地運行。這兩次都是我花費兩次保存文件的時間 - 但這也是我心中的疑慮,每當某些事情不像我想要的那樣行事時 - 那麼我總是必須先檢查文件是否正確上傳。使PhpStorm監視(特定)文件並在更改時上傳

我正在使用Wordpress,我有5-8個SCSS文件,這些文件正在使用gulp進行編譯。 gulp程序非常全面(autoprefixer,merge-media-queries,minifycss等等),所以編譯文件需要幾個毫秒的時間。我認爲編譯時會導致PhpStorm'錯過'style.css已經改變 - 因此不要在第一次'保存'時上傳它。因爲有時候所有的東西都是在第一次「保存」之後上傳的 - 但是這只是第8次(或者這樣)。

額外的樂趣的事實(這可能表明身體埋在哪裏):如果我在後臺運行終端的gulp watch,那麼我必須保存該文件,等待至少2-4秒,然後再次保存,在上傳gulp-compiled-style.css文件之前。如果按'保存','保存','保存','保存' - 暫停時間少於2-4秒,但暫停1秒,則PhpStorm永遠不會同步gulp-compiled-style.css文件。 如果我從PhpStorm的Gulp集成(不是終端,但是Gulp提示符)運行gulp watch,那麼我可以連續保存兩次,之間只有0.5秒的暫停(一旦底部的進度條消失) - 然後上傳(每次 - 一致)。

這只是gulp-compiled-style.css文件的上傳問題。其他一切都很完美。

這是我曾嘗試:

** Attempt1)我以前用過的Atom,使用帶有.ftpconfig文件插件在那裏建立了FTP的配置。在那個文件中,有一個'watch: []'-參數,我可以指定一個文件來「監視」。奇蹟般的工作!我試圖找到一個插件,做了這種事 - 但找不到它。

**嘗試2)我讀了support-pages之一,關於相同。看起來如果SCSS文件是使用PhpStorm編譯的,那麼它知道要上傳style.css文件(編譯後)。我無法使用PhpStorms的SCSS編譯來設置我的gulp文件(因爲它編譯了它,然後通過多個過程管理內容,如果我改變了項目並且每次都要設置它,那將是一件很痛苦的事情)維護

**嘗試3)我想過製作一個宏或什麼的。然後看看我是否可以將CMD-s重映射爲'保存當前文件並執行這個宏'。但是,如果我不編輯scss文件(但只是一些php文件),那麼它仍然會上傳style.css文件。這絕不是一個漂亮的解決方案,但它只是顯示了我已經走了多遠,找到一個解決方案來實現這一點。

** Attempt4)我想過它建設成一飲而盡文件,它有編制的style.css文件後到的style.css文件上傳。我想從.idea文件夾中獲取主機和用戶名,然後從鑰匙串獲取密碼,然後以此方式建立sftp連接。但是,這很快就變得非常廣泛,所以我希望有一個更簡單/更好的方法。

Addition1

LazyOne問,我曾試圖與文件看守,所以這裏去。我試圖讓PhpStorm編譯Scss文件(所以PhpStorm基本上做了Gulp今天爲我做的)。 因此這是一個SCSS-filewatcher(文件類型),範圍是我項目中的SCSS文件,將'Program'指向我的ruby安裝的scss文件等,等等等等。

但是......我意識到要讓PhpStorm像Gulp文件那樣對Scss文件做同樣的事情是很困難的。

我正在使用的Gulp文件隨每個項目一起提供(作爲默認設置) - 我們有幾個webdesigners在處理相同的項目。所以如果我突然做了一些其他的使用Gulp文件的工具,那麼我很確定我必須能夠產生完全相同的結果,否則我很確定我的同事會讓我活着。但我做到了儘可能有這個作爲我的論點,之前我放棄了(我仍然需要做幾件事情在這條線,它確實我咕嘟咕嘟文件做什麼之前):

--no-cache --update $FileName$:../../style.css --style compressed --sourcemap=none 

.. 。但是...當這樣做的時候,我可以得出結論,style.css文件上傳每次保存(分數!)。這意味着如果我可以設置某種文件觀察器,那麼希望PhpStorm會觀看該文件,因此在Gulp編譯style.css後上傳它。

所以我試着製作一個File Watcher,它監視style.css文件 - 但我不知道應該把什麼放在我的'程序'中。因爲基本上我想讓PhpStorm用一根棍子捅三次style.css文件 - 然後意識到文件已經改變並上傳到服務器。這有可能自動執行嗎?

+2

如果你正在編譯IDE以外的東西('gulp watch'等)......那麼我可以提供的最好的方法是1)嘗試將其實現爲File Watcher。如果你已經嘗試過 - 展示你的嘗試。如果您在該論壇主題中查看我的評論 - 應該可以工作2)點擊File |手動同步「(此操作將檢查所有本地項目文件,以查找在IDE之外完成的可能更改)。一旦發現這種變化,「上傳外部變更」應該跳進去。 – LazyOne

+0

感謝您輸入@LazyOne。我做了一個'補充'部分,解釋我在File Watcher上的嘗試。 – Zeth

+1

那麼...... 1)你可以讓多個文件觀察者處理同一個文件(將會一個接一個地運行),或者你只是批量處理它們(通過自定義中間腳本..或者一個gulp任務)2)你可以創建專用的gulp任務那樣會編譯/不管(所以你把所有的邏輯都保存在裏面)並在File Watcher中調用它。在這兩種情況下(正如我在論壇線程中所說的那樣),關鍵是將'刷新路徑'指向目標生成的文件 - 這是IDE在文件觀察器完成後將檢查更改的文件。 – LazyOne

回答

1

好的。這是如何完成的!

重要的是PhpStorm監視style.css文件。它會這樣做,如果你指向一個File Watcher來查看這個文件。現在,我開始嘗試用File Watcher運行Gulp文件。然後我試着用File Watcher編譯scss文件。但這不是必要的。重要的部分是'輸出路徑刷新'(正如@LazyOne在評論中指出的那樣)。所以我最好的解決方案是製作一個無所事事的bash腳本。它看起來像這樣:

#!/bin/bash 

sleep .01 

我稱之爲「無用」。我不必爲sleep .01工作,但它不會阻止它工作(基於我已完成的20個上傳測試)。而且在我看來,如果在scss文件保存後有一個短暫的延遲時間會更好(所以PhpStorm中的吞噬集成有時間來完成編譯style.css文件)。

這裏是我的文件守望者的設置: enter image description here

範圍是定製的一個,我已經將它設置爲這樣:

file[PROJECTNAME]:wp-content/themes/THEME_NAME/assets/sass/* 

但是我認爲範圍可以只是整個項目,因爲它只是在執行'程序'之前查找SCSS文件在該範圍內變化時(如果我已經正確理解了整個File Watcher的話)。

而且我工作的一個項目,其中SCSS-文件是在

/wp-content/themes/THEME_NAME/assets/sass/STYLEDIRNAME/ 

在這種情況下,則「輸出路徑刷新」應設置爲沿着這些路線的東西:

$FileDirRelativeToProjectRoot$/../../style.css 

$ProjectFileDir$/wp-content/themes/THEME_NAME/style.css 

如果你展開 '其他選項',然後你必須設置Working directory是項目的根,它的工作:

/Users/USERNAME/dropbox/foo/bar/ 

用於該解決方案的垮臺是,如果PhpStorm比咕嘟咕嘟任務更快, - 因爲它會再上傳的style.css文件在Gulp任務完成編譯之前(因此上載舊的或不完整的文件)。這在我20次短暫的測試中沒有發生。但是如果它發生了,那麼我會在'donothing'文件中設置一個更長的延遲,看看是否能解決這個問題。

加1

我剛經歷,這是行不通的 - 它沒有上傳style.css在每次編譯/保存(但我可以發誓,該設置是正確的)。所以我重新啓動了PhpStorm,然後運行。我試着首先重新啓動gulp watch-進程,但這並沒有什麼區別。