工作日常记录 2017-09-20

本文介绍了使用Webpack和Babel打包Node程序时需要注意的环境配置,以及如何利用RxJS的merge方法来合并多个不相关的Observable流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作收获日志 2017-09-20


描述:

工作任务没有多少的时候记录的日志, 随便看看各种node,rxjs之类的内容,随手记录一下遇到的有用的东西,内容之间没有必然的关联。

  1. 使用webpack配合babel来进行打包生成node程序的时候,注意一定要在webpack的config里面指定编译的目标环境为node, 否则编译的时候一些node环境下必须的环境变量无法访问导致错误,如:

    // With 'target' attribute unassigned, 
    // These following code will have problem.
    console.log(`stdin: ${typeof process.stdin}`);
    // Output is `stdin: undefined`
    
    // In webpack.config.js, add following configuration:
    module.exports = {
        // other configs..
        target: 'node',
        // other configs
    };
    
    // After this configuration, you can use following code:
    process.stdin.addListener(
        'data', value => console.log(`input: ${value}`)
    );
    
    // Then in console:
    this is a input phase \n
    // You will receive:
    input: this is a input phase
    
  2. RxJS 的merge方法

    从RxJS的官网上可以知道,这个operator的方法是把几个相互之间没有关系的Observable(假设为a,b,c)合并,生成一个新的Observable流(假设为Combine)。a,b,c任意一个Observable产生了数据都会传递给Combine,之后再传递给订阅了Combine的subscribe函数来进行对应的处理。
    一个简单的例子

    // import necessary libs.
    // Note in Node import is not supported.
    // You need to introduce webpack and babel es2015
    // to compile the following code 
    import Rx from 'rxjs';
    import Events from 'events';
    
    // Here we have two Observable created by timer
    const timer1 = Rx.Observable
    .timer(0, 1000).mapTo({ value: 'input from timer1' });
    const timer2 = Rx.Observable
    .timer(0, 4000).mapTo({ value: 'input from timer2' });
    
    // Here we create a new observable that will be triggered
    // Whenevent we input something on the console
    const inputEmitter = new Events.EventEmitter();
    
    // Register system input
    process.stdin.addListener(
        'data', value => inputEmitter.emit('input', { value })
    );
    
    // Create Observable from event
    const input = Rx.Observable.fromEvent(
        inputEmitter, 'input'
    );
    
    // Create a new Observable stream that merge them
    Rx.Observable.merge(timer1, timer2, input)
    .subscribe(e => console.log(`trigger: ${e.value}`));
    

    webpack编译运行后结果如下

        // After 1 second
        trigger:  input from timer1
        // After another 3 second
        trigger: input from timer2
        // Then we input a string from CLI
        this is a test input
        // Then we immediately have
        trigger: this is a test input
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值