美文网首页
优化 NPM 脚本

优化 NPM 脚本

作者: 柏丘君 | 来源:发表于2018-11-05 16:19 被阅读0次

有时候,运行一个工程,可能需要执行多个脚本。如需要执行客户端代码的 webpack 打包,还要执行服务端代码的 webpack 打包,当服务端代码进行 webpack 进行打包后,还要重新启动服务器等。
本文就是基于这样一个需求,使用 npm-run-allbetter-npm-runnodemon 来优化 NPM 脚本。

基本配置

先满足最基本的需求:配置客户端和服务端代码的 webpack 打包命令:

{
...
"scripts": {
    "run:server":"node dist/server.js",
    "dev:server": "cross-env PLANTFORM=SERVER ENV=DEVELOPMENT webpack --config build/webpack.config.js --watch",
    "dev:client": "cross-env PLANTFORM=CLIENT ENV=DEVELOPMENT  webpack --config build/webpack.config.js --watch",
    "build:server": "cross-env PLANTFORM=SERVER ENV=PRODUCTION webpack --config build/webpack.config",
    "build:client": "cross-env PLANTFORM=CLIENT ENV=PRODUCTION webpack --config build/webpack.config",
    "update:check": "ncu",
    "update": "ncu -a"
  }
...
}

在命令行执行 npm run dev:servernpm run dev:client 分别可以在服务端和客户端使用 webpack 打包,并自动监听文件变化。执行 npm run build:servernpm run build:client 分别可以在服务端和客户端执行生产环境构建。
执行 npm run run:server 可以运行服务器。
另外 update:checkupdate 两个命令分别用来检查 package.json 中依赖包的更新版本和强制更新 package.json 中的依赖。
配置完上面的命令后,就可以用来进行开发了。但是使用还比较麻烦:客户端和服务端的构建,需要分别开启两个命令行窗口,再加上启动 Node 服务的窗口,一共三个窗口。同时,当服务端构建的代码发生变化后,无法自动重启服务器,需要手动停止再运行服务,可谓相当麻烦。

服务器自动重启

让我们先来解决服务器自动重启的问题,这需要用到nodemon 这个包,类似的还有supervisor这个包,后面这个包有一段历史了,但是作者已经很久没有更新了。推荐使用nodemon
借助nodemon,优化NPM脚本:

{
...
"scripts": {
    "run:server":"nodemon --watch dist --exec node dist/server.js",
    ...
  }
...
}

现在,当 dist 目录发生变化,就可以自动重启服务器了。

命令并行执行

借助 nodemon,解决了服务器自动重启的问题,但是三个命令行窗口还是很麻烦,我们可以借助 npm-run-all 这个包,来让三个命令在一个命令行窗口中运行:

{
...
"scripts": {
    "start": "npm-run-all --parallel dev:* run:server",
    "build": "npm-run-all --parallel build:*",
    ···
  }
...
}

我们在 scripts 中加了一个 startbuild 命令,运行 npm run startnpm run build 就可以实现在一个命令行窗口中,并行执行开发和生产环境中的命令。
--parallel 用来指定哪些命令需要并行执行,支持通配符。

优化脚本

上面我们已经完成了想要的功能:服务器自动重启和命令并行执行。乍看 scripts 中的命令,很长很凌乱。对于这个问题,可以借助better-npm-run 这个包来进行优化:

{
···
 "scripts": {
    "start": "better-npm-run start",
    "build": "better-npm-run build",
    "dev:server": "better-npm-run  dev:server",
    "dev:client": "better-npm-run dev:client",
    "build:server": "better-npm-run build:server",
    "build:client": "better-npm-run build:client",
    "run:server": "better-npm-run run:server",
    "update:check": "better-npm-run update:check",
    "update": "better-npm-run update"
  },
  "betterScripts":{
    "start": "npm-run-all --parallel dev:* run:server",
    "build": "npm-run-all --parallel build:*",
    "run:server": "nodemon --watch dist --exec node dist/server.js",
    "update:check": "ncu",
    "update": "ncu -a",
    "dev:server":{
      "command":"webpack --config build/webpack.config.js --watch",
      "env":{
        "PLANTFORM":"SERVER",
        "ENV":"DEVELOPMENT"
      }
    },
    "dev:client":{
      "command":"webpack --config build/webpack.config.js --watch",
      "env":{
        "PLANTFORM":"CLIENT",
        "ENV":"DEVELOPMENT"
      }
    },
    "build:server":{
      "command":"webpack --config build/webpack.config.js",
      "env":{
        "PLANTFORM":"SERVER",
        "ENV":"PRODUCTION"
      }
    },
    "build:client":{
      "command":"webpack --config build/webpack.config.js",
      "env":{
        "PLANTFORM":"CLIENT",
        "ENV":"PRODUCTION"
      }
    }
  },
···
}

通过better-npm-run这个包,我们把脚本命令写得更具有层次感,虽然代码量增加了,但结构更加清晰。

完。

相关文章

  • 优化 NPM 脚本

    有时候,运行一个工程,可能需要执行多个脚本。如需要执行客户端代码的 webpack 打包,还要执行服务端代码的 w...

  • better-npm-run优化npm脚本

    betterScripts脚本定义可以是具有command和env属性的字符串或子对象。env块中定义的值将覆盖先...

  • npm配置文件脚本定义.md

    [TOC] 一、npm脚本原理 npm脚本的原理非常简单。每当执行npm run,就会自动新建一个Shell,在这...

  • npm scripts介绍

    前言 Node开发离不开npm,而脚本功能是npm最强大和最常用的功能之一 什么是npm 脚本 npm允许在pac...

  • npm 脚本命令

    Node 开发离不开 npm,而脚本功能是 npm 最强大、最常用的功能之一。 本文介绍如何使用 npm 脚本(n...

  • npm 深入了解

    Node 开发离不开 npm,而脚本功能是 npm 最强大、最常用的功能之一。 本文介绍如何使用 npm 脚本(n...

  • npm scripts 使用指南

    Node 开发离不开 npm,而脚本功能是 npm 最强大、最常用的功能之一。本文介绍如何使用 npm 脚本(np...

  • Async / npm scripts(脚本)

    Async npm scripts(脚本)

  • npm中script脚本的使用

    一、什么是 npm 脚本? npm 允许在package.json文件里面,使用scripts字段定义脚本命令。 ...

  • package.json配置之script

    script配置 实则为npm脚本(npm允许在package.json文件里面,使用scripts字段定义脚本命...

网友评论

      本文标题:优化 NPM 脚本

      本文链接:https://www.haomeiwen.com/subject/xkmsxqtx.html