2017-10-11 35 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