在构建时我们为何会忽略掉npm?
- 人们认为npm scripts需要强大的命令行技巧
- 人们认为npm scripts不够强大
- 人们认为Gulp的流对于快速构建来说是不可或缺的
- 人们认为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**