2017-10-11 31 views
0

我有以下目錄結構:手錶在NPM鏈路包變更建設得到的WebPack

application 
      | 
      |__ component-library 
      | 
      |__src 
      | 
      |__ app 
      | 
      |__src 

我用lernaapp鏈接component-library

當時我鏈接到編碼輸出component-library

我想以某種方式監聽組件庫文件夾中將導致重新編譯的更改。

我需要使用gulp嗎?

回答

1

我們使用紗線工作區而不是lerna,但它基本上是相同的東西(默認情況下,來自lerna的--hoist選項)。

我會假設你是從applicationwatch選項設置爲true根開始的WebPack(或正在使用webpack-dev-server)在開發過程中,你必須在component-library的一個的package.json設置prepare script爲發佈,並且app列出component-library中的模塊作爲其package.json中的依賴關係(即在導入期間不使用相對路徑/需要來自component-library的模塊)。

我想以某種方式偵聽組件庫文件夾 中的更改,這會導致重新編譯。

我需要使用gulp嗎?

您需要一些實用程序來觀察component-library中的文件更改,但不一定是吞嚥,但可以。當component-library中的文件發生更改時,您需要重新運行prepare腳本,以便重新發布軟件包,因此webpack會注意到其依賴關係圖中的某個模塊已更改,並且會重建根application(可能會根據您的開發設置踢出瀏覽器重新加載)。請注意,僅在component-library中觀看文件而不重建/發佈是不夠的,因爲webpack在其依賴關係圖中構建了component-library,而不是開發源代碼。

如果你想使用吞掉一隻手錶任務可能是這個樣子:

import gulp from 'gulp'; 
import { spawn } from 'child_process'; 

gulp.watch('path/to/component-library/src/*.js',() => { 
    let prepare = spawn('yarn', ['run', 'prepare'], { 
     cwd: 'path/to/component-library', 
     stdio: 'inherit' 
    }); 

    prepare.on('exit', (code) => { 
     if (code !== 0) { 
      prepare.emit('end'); 
     } 
    }); 

    // gulp 4 allows returning a child process to signal async completion 
    return prepare; 
}); 

由於勒拿湖符號鏈接的WebPack的watch選項可以看到改變一個模塊,並重建根application

+0

非常感謝你的回答。你提供組件庫構建的源代碼嗎? – dagda1

+0

如果你想對組件庫的用戶友好,儘管你應該讓它們成爲外部的(即不是內聯的),你也可以。技術上來說,組件庫是一個依賴項,它應該沒有錯誤地工作,所以不需要源代碼映射,但是因爲它在你自己的項目中的依賴關係在發佈的構建中提供源代碼映射將有助於它自己的開發。 – Morgan