我們使用紗線工作區而不是lerna,但它基本上是相同的東西(默認情況下,來自lerna的--hoist
選項)。
我會假設你是從application
與watch
選項設置爲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
。
非常感謝你的回答。你提供組件庫構建的源代碼嗎? – dagda1
如果你想對組件庫的用戶友好,儘管你應該讓它們成爲外部的(即不是內聯的),你也可以。技術上來說,組件庫是一個依賴項,它應該沒有錯誤地工作,所以不需要源代碼映射,但是因爲它在你自己的項目中的依賴關係在發佈的構建中提供源代碼映射將有助於它自己的開發。 – Morgan