我们使用纱线工作区而不是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