【问题标题】:Watch for changes in an npm link package being built with webpack观察使用 webpack 构建的 npm 链接包的变化
【发布时间】:2017-10-11 21:54:43
【问题描述】:

我的目录结构如下:

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

我已经使用lernacomponent-library 链接到app

此时我正在链接到 component-library 的编译输出。

我想以某种方式监听组件库文件夹中会导致重新编译的更改。

我需要使用 gulp 吗?

【问题讨论】:

    标签: javascript webpack gulp lerna monorepo


    【解决方案1】:

    我们使用 yarn 工作空间而不是 lerna,但它本质上是一样的(默认情况下来自 lerna 的--hoist 选项)。

    我将假设您在开发期间从 application 的根目录启动 webpack,并将 watch 选项设置为 true(或正在使用 webpack-dev-server),您有一个 prepare scriptcomponent-library 的 package.json 中设置用于发布,并且 app 将来自 component-library 的模块列为其 package.json 中的依赖项(即在导入/要求来自 component-library 的模块期间不使用相对路径) .

    我想以某种方式监听组件库文件夹中的变化 这将导致重新编译。

    我需要使用 gulp 吗?

    您需要一些实用程序来监视 component-library 中的文件更改,不一定是 gulp,但您可以。当来自component-library 的文件发生更改时,您需要重新运行prepare 脚本,以便它重新发布包,然后webpack 会注意到其依赖关系图中的一个模块发生了变化,并将重建根application(可能踢根据您的开发设置重新加载浏览器)。注意,仅仅观察component-library 中的文件而不重建/发布是不够的,因为webpack 在其依赖图中有component-library 的构建,而不是开发源代码。

    如果你想使用 gulp,watch 任务可能看起来像这样:

    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;
    });
    

    由于 lerna 符号链接,webpack 的 watch 选项可以看到模块已更改,并将重建根 application

    【讨论】:

    • 非常感谢您的回答。您是否从组件库构建中提供源地图?
    • 如果您想对组件库的使用者友好,您可以这样做,尽管您应该将它们设为外部(即不是内联)。从技术上讲,component-library 是一个依赖项,应该可以正常工作,因此不需要源映射,但由于它是您自己项目中的一个依赖项,在已发布的构建中提供源映射将有助于它自己的开发。
    猜你喜欢
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2019-06-07
    • 2021-11-06
    • 2018-04-24
    • 1970-01-01
    相关资源
    最近更新 更多