标签: node.js

  • 几步简单的操作解决 `npm audit` vulnerabilities

    几步简单的操作解决 `npm audit` vulnerabilities

    NPM 是 JavaScript 生态最重要的组成部分,我们的项目中会大量使用 NPM 安装第三方包(安装后就称为“项目依赖”)解决问题。这些第三方包也会带来他们的依赖,最终一个项目里可能安装成百上千个依赖。

    有道是:没有完美的代码,代码里一定藏有隐患。所以用的依赖多了,其中有问题的概率也提升了,三五不时的,npm 就会提示我们:found N low/medium/high severity vulnerabilities

    npm 提供命令 npm audit fix,理论上可以修复这些隐患,但在实际操作中,以我的经验来看,并不容易生效。我猜测可能是因为依赖间的复杂关系,想彻底解决并升级不太容易。所以我一般是这样做的:

    (更多…)
  • 解决“[ERR_PACKAGE_PATH_NOT_EXPORTED]: No “exports” main resolved”

    解决“[ERR_PACKAGE_PATH_NOT_EXPORTED]: No “exports” main resolved”

    周末例行升级系统,今天打开项目,npm run dev,就报这个错误。检查代码,没变化,依赖也没变化。因为错误位置在 main.js,尝试给它加上 exports,无果。

    Google 之,发现一个非常新的 issue:https://github.com/babel/babel/issues/11216,3天前,来自 @babel/babel 仓库,多半是了。

    点进去一看,原来 node.js 从 13.10.1 之后,对 package.json 里的 exports 属性解读出现问题,继而导致 Babel 抛出错误。最简单的解决方法就是升级 Babel 到 7.8.4。

    升级后问题解决。

  • 在 Node.js 12 中使用 ESM

    在 Node.js 12 中使用 ESM

    Node.js 12 之后开始支持 ECMAScript Modules(简称ESM),不过并不是默认开启或者自动切换。坦率地说我也卡了一阵子才搞清楚怎么直接使用。简单记一下吧。

    (更多…)
  • Node.js 里使用 Promise 的小技巧

    Node.js 里使用 Promise 的小技巧

    Node.js 8 的时候,引入了 util.promisify() 方法,可以把 node-like 的回调函数改造成返回 Promise 实例的方法,我当时还写了篇博文《Node.js 8 中的 util.promisify》小记。

    所以我现在写 Node.js 基本都是这种风格:

    const fs = require('fs');
    const {promisify} = require('util');
    
    const readFile = promisify(fs.readFile);
    const writeFile = promisify(fs.writeFile);

    刚才在推上看到两位大佬聊起这个话题,发现可以这么搞:

    去查了一下 Node.js 的文档,发现这是 v10 新增的 API,升级之后即可使用。

    我比较喜欢这么做:

    const {promises: {readFile, writeFile}} = require('fs');
    
    (async () => {
      let content = await readFile('1.txt', 'utf8');
      content = doSthToContent(content);
      await writeFile('2.txt', content, 'utf8');
      console.log('ok');
    })();
  • 网站抓取工具 website-scraper

    网站抓取工具 website-scraper

    临时需要抓一个网站,搜索了一下,发现 website-scraper,用了一下感觉不错。它有如下优点:

    1. 基于 Node.js 和 NPM,系统无关
    2. 可以根据链接抓取整个网站
    3. 文档齐全,仓库还有人维护
  • node.js 复制文件最快的方法

    node.js 复制文件最快的方法

    Subway

    最快的方法

    var fs = require('fs');
    
    fs.createReadStream('test.log').pipe(fs.createWriteStream('newLog.log'));
    

    改进使其可以接受回调

    function copy(source, to, callback) {
      var read = fs.createReadStream(source);
      source.on('error', function (err) {
        done(err);
      }
    
      var write = fs.createWriteStream(to);
      write.on('error', function (err) {
        done(err);
      }
      write.on('finish', function () {
        done();
      }
      read.pipe(write);
    
      function done(err) {
        if (err) {
          throw err;
        }
        callback();
      }
    }
    

    继续添加 Promise,并且用 ES2015 的写法

    function copy(source, to) {
      return new Promise( resolve => {
        let read = fs.createReadStream(source);
        source.on('error', err => {
          throw err;
        });
    
        let write = fs.createWriteStream(to);
        write.on('error', err => {
          throw err;
        });
        write.on('finish', ()=> {
          resolve();
        });
    
        read.pipe(write);
      });
    }
    
    // example
    copy('a.txt', 'b.txt')
      .then( () => {
        console.log('copy success');
      })
      .catch( err => {
        console.log('copy error: ', err);
      });
    

    来源:StackOverflow

    Fastest way to copy file in node.js

  • 新版node.js安装教程

    知道node.js这个东西后,一直想尝鲜。今天终于下手,先要安装环境,看了好多教程,没看太明白,似乎很难的样子。

    最后按照官方文档自己尝试了才知道,原来现在安装node.js已经完全自动化了。我用的是Ubuntu 10.4,先更新一下源:

    sudo apt-get update
    sudo apt-get upgrade

    然后安装GNU make和git,接着clone代码,最后make就ok了。

    sudo apt-get install gcc
    sudo apt-get install git-core
    git clone git://github.com/joyent/node.git
    cd node
    ./configure
    make
    make install

    make的过程比较久,让它慢慢跑就是了,完成后,就可以在命令行里测试了。现在node.js已经是0.9.3-pre版了,看到版本号很高,心里很高兴呀~

    node -v // v0.9.3-pre
    node
    > console.log('hello, world') // hello, world

    今天先到这里,将来哪天开新项目的时候用node.js做后端吧。