首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RollupJS在nodejs服务器上启用livereload

使用RollupJS在nodejs服务器上启用livereload
EN

Stack Overflow用户
提问于 2019-08-03 16:35:42
回答 1查看 190关注 0票数 1

每当我对客户机源进行更改时,我都想启用浏览器的livereloading。我想将此机制添加到为客户端提供服务的现有nodejs服务器中。我怎样才能最好地使用RollupJS呢?

EN

回答 1

Stack Overflow用户

发布于 2019-08-03 16:35:42

服务器:

代码语言:javascript
复制
import http from 'http';
import { server as ServerWs } from 'websocket';
import { watch } from 'rollup';
import rollupConfig from './rollup.config';

...

if (process.env.NODE_ENV === 'development') {

    // Setup websocket server for livereload
    const httpServer = http.createServer();
    const ws = new ServerWs({ httpServer, autoAcceptConnections: true });
    httpServer.listen(12012);

    // Rollup build watcher enabling reload when finished
    const watcher = watch(rollupConfig);
    watcher.on('event', (ev) => {
        switch (ev.code) {
        case 'START':
            ws.broadcast('livereloadstart');
            break;
        case 'END':
            ws.broadcast('livereloadend');
            break;
        default: break;
        }
    });
}

websocket连接安装:https://www.npmjs.com/package/websocket

客户端:

代码语言:javascript
复制
if (process.env.NODE_ENV === 'development') {

    // Enable live reloading whenever a change on the client code occurs.
    let interval = -1;
    const connectWebsocket = () => {
        clearInterval(interval);
        const ws = new WebSocket('ws://localhost:12012');
        ws.addEventListener('message', message => {
            switch (message.data) {
            case 'livereloadstart': 
                console.warn('Recompiling, please wait for reload...'); 
                break;
            default: 
                location.reload(); 
                break;
            }
        });
        ws.addEventListener('close', () => {
            // Try to reconnect every second with the server whenever it lost connection.
            interval = setInterval(connectWebsocket, 1000);
        });
    };
    connectWebsocket();
}

使用websocket API:https://developer.mozilla.org/en/docs/Web/API/WebSocket

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57336755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档