在构建时我们为何会忽略掉npm

2016-11-22  本文已影响57人  从此以后dapeng

在构建时我们为何会忽略掉npm?

  1. 人们认为npm scripts需要强大的命令行技巧
  2. 人们认为npm scripts不够强大
  3. 人们认为Gulp的流对于快速构建来说是不可或缺的
  4. 人们认为npm scripts无法实现跨平台运行

误解1:使用npm scripts需要强大的命令行技巧

npm scripts的强大功能其实并不需要对操作系统的命令行了解太多。当然了,grep、sed、awk与管道等是值得你去学习的,令你众生受用的技能;

误解2:npm scripts不够强大

npm scripts本身其实是非常强大的。它提供了基于约定的pre与post钩子:

{
    name: "npm-scripts-example",
    version: "1.0.0",
    description: "npm scripts example",
    scripts: {
        prebuild: "echo I run before the build script",
        build: "cross-env NODE_ENV=production webpack",
        postbuild: "echo I run after the build script"
    }
}

此外,还可以通过在一个脚本中调用另一个脚本来对大的问题进行分解,还可以通过&&在一行连续调用多个脚本。

  "name": "npm-scripts-example",
  "version": "1.0.0",
  "description": "npm scripts example",
  "scripts": {
    "clean": "rimraf ./dist && mkdir dist",
    "prebuild": "npm run clean",
    "build": "cross-env NODE_ENV=production webpack"
  }
}```
如果一个命令很复杂,那还可以调用一个单独的文件
```{
  "name": "npm-scripts-example",
  "version": "1.0.0",
  "description": "npm scripts example",
  "scripts": {
    "build": "node build.js"
  }
}```

# 误解3:Gulp的流对于快速构建来说是不可或缺的
事实上,流早就已经被内建到Unix与Windows命令行中了。管道(|)运算符会将一个命令的输出以流的方式作为另一个命令的输入。重定向(>)运算符则会将输出重定向到文件。在Unix中,还可以通过“&”运算符同时运行两个命令。
grep ‘Cory House’ bigFile.txt > linesThatHaveMyName.txt
npm run script1.js & npm run script2.js

# 误解4:npm scripts无法实现跨平台运行
很多项目都会绑定到特定的操作系统上,因此跨平台是一件并不那么重要的事情。不过,如果需要以跨平台的方式运行,那么npm scripts依然可以工作得很好。
如果希望构建脚本能够运行在所有平台上,你需要适配Unix与Windows。
    
**方式1:使用跨平台的命令**
&& 链式任务(一个任务接着一个任务运行)
< 将文件内容输入到一个命令
>  将命令输出重定向到文件
| 将一个命令的输出重定向到另一个命令
**2. 方式2:使用node包**
可以使用node包来代替shell命令。比如说,使用rimraf来代替“rm -rf`”。使用cross-env以跨平台的方式设置环境变量。

**3. 方式3:使用ShellJS**
上一篇 下一篇

猜你喜欢

热点阅读