Closed linhe0x0 closed 3 years ago
简单的来说,Slush 就是一个脚手架生成工具。什么?脚手架?这是什么鬼?嗯,脚手架嘛,自然是这个样子咯~
什么?你问的是编程中的脚手架呀?啊,这么说吧。身为一个前端开发者,每次新建一个项目的时候是不是要创建好多个文件夹、配置文件?写个文档是不是要创建好多个目录?然而每个项目的结构和配置文件都大同小异,是不是早已繁琐感觉人生无望,失去了活着的意义?
就在这个时候,Slush 横空出世,能够让你轻松搞定这些繁琐的事情,重新找回人生的意义,你就说吼不吼啊。从此麻麻再也不用担心我整天都在忙着创建文件夹啦。
嗯。Yeoman 确实也是一个很好用的脚手架工具,历史悠久。然而它以 Grunt 为基础工具,上手难度大大提高。在轮子层出不穷的前端领域早已是风前残烛。而 Slush 则是基于 Gulp 的 『流式』思想作为基础工具,当你在做定制化脚手架时,Gulp 简单易用的特点则能让你轻轻松松搞定。
噢,这么屌?那该怎么用呢?
好啦,废话不多说啦,我们赶紧来趁着这个热乎劲看看怎么使用吧。
首先,你得有 NodeJS 环境,什么?连 NodeJS 都没装?赶紧回家洗洗睡吧。如果你已经有了呢,你就可以通过 npm 直接将 slush 安装到全局环境下啦:
npm install -g slush
安装完了之后,你可以执行下面这行命令来确保安装成功:
slush -v
如果你能看到输出了一个版本号,就说明已经安装成功啦。下面我们就来看一下如何使用吧。
在使用 slush 创建项目之前,你得先安装一些别人开发好的脚手架。安装好脚手架之后才能根据脚手架生成约定好的项目结构哟。
咦?不知道有什么脚手架?快来 大厅 里找找吧。
很好,你已经找到了自己喜欢的脚手架了,我们快来安装它吧。打住,提醒你一下,脚手架要安装到全局环境下才有效哟。
npm install -g slush-react-starter-kit
现在我们已经安装好需要的一切了,终于可以开始创建项目啦。
首先,创建一个项目文件夹并进入文件夹中:
mkdir my-first-slush-project cd my-first-slush-project
其次,执行 slush 生成命令:
slush react-starter-kit
react-starter-kit是什么鬼?我们安装的明明是 slush-react-starter-kit 呀。没错,在生成项目的时候,slush 后面跟的脚手架名字中是不带 slush 关键词的。就是这么任性。
react-starter-kit
slush-react-starter-kit
slush
当然了,可能你翻遍了整个大厅都没找到自己想要的,迫切想要自己定制一个脚手架怎么办呢?且听我慢慢道来。
其实很简单啦,Slush 脚手架就是一个普通的 npm package,唯一需要注意的有这么几点:
slush-*
slushfile.js
templates
假设你已经按照上面这些约定做好了准备工作,那么接下来我们就可以搞一件大新闻啦。
首先,你要将模板文件(就是运行脚手架之后生成的项目文件)全部放到 templates 文件夹中
前面已经说到 Slush 是基于 Gulp 作为基础工具的,所以你只需要按照 Gulp 的使用方法在 slushfile.js 编写任务流就可以啦。
咦,好像有点不太对,既然是用 Gulp,那么 gulpfile.js 文件呢?
gulpfile.js
这里确实是不需要 gulpfile.js 文件啦,因为 Gulp 任务都在 slushfile.js 文件中写啦,Slush 会帮你自动驱动 Gulp 的啦。
好了,那么 slushfile.js 文件中的到底该怎么写呢?放着我来,小哥亲自给你示范一下:
var gulp = require('gulp'), install = require('gulp-install'), conflict = require('gulp-conflict'), template = require('gulp-template'), inquirer = require('inquirer'); gulp.task('default', function (done) { inquirer.prompt([ { type: 'input', name: 'name', message: 'Give your app a name', default: gulp.args.join(' ') // 从运行参数中获取值作为 name 的默认值。 }, { type: 'confirm', name: 'moveon', message: 'Continue?' } ]).then(function (answers) { if (!answers.moveon) { return done(); } gulp.src(__dirname + '/templates/**') // 使用脚本所在的目录作为相对路径。 .pipe(template(answers)) // Lodash 模板支持,可以方便的在模板中进行插值。 .pipe(conflict('./')) // 当文件冲突时,询问是否覆盖。 .pipe(gulp.dest('./')) // 输出到执行命令的当前文件夹中。 .pipe(install()) // 使用 `bower install` 或 `npm install` 执行安装操作。 .on('end', function () { done(); // 告知完成。 }); }); });
PS: 去哪里发现诸如 [inquirer](https://github.com/SBoudrias/Inquirer.js) 这么好用的 package 呢?你可以关注下 github.com/sqrthree/awesome-npm-packages 哟。
[inquirer](https://github.com/SBoudrias/Inquirer.js)
现在就已经搞定啦,接下来怎么使用呢?因为 Slush 调用的是全局环境下的脚手架,但是目前我们的脚手架并不在全局环境中,然而你还没发布这个脚手架,不能直接工作 npm install -g 进行全局安装,所以显然是不!能!用!啦!哈!哈!哈!
npm install -g
别着急砸电脑嘛,我们还有一个办法捏。那就是通过 npm link 命令将当前脚手架挂载到全局环境中啦。你只需要在当前文件夹中执行 npm link,搞定,收工(前提是 package.json 已经写好)。然后就可以随便找个文件夹安装我们上面说的方法使用脚手架啦。
npm link
package.json
尽管自定义一个脚手架已经非常方便了,但是细心的你会发现几乎每个脚手架之间 slushfile.js 也都大同小异,只是 templates 文件夹中的模板文件不一样,所以呢,你懂得😉。
slush-generator 就是这么一个让我们来生成 Slush 脚手架的脚手架。有了它,创建自定义脚手架的时候异常方便。
npm install -g slush-generator
mkdir my-slush-generator cd my-slush-generator
slush generator
之后会让你回答一些问题,在回答过之后,你的自定义脚手架目录就已经生成好啦。接下来只需要在 templates 文件夹中放置你需要的文件就好了。
直接输入 slush 即可看到已经安装过的脚手架:
➜ slush [slush] Installed generators [slush] ├── generator (0.2.11) [slush] └── koa2 (0.1.0)
怎么样?是不是已经迫不及待的想要尝试了?
喔,对了,少侠留步,差点忘了告诉你一件事情:
楼主真是可爱呢😊
为什么用slush输出脚手架里的 .文件 都不见了,例如.gitgnore,.eslintrc.js文件都不见了??
哼我自己解决了,去他们github看就是说把 .文件 改名为 _文件,再在slushfile.js中再转换回来就行了
Slush 是什么?
简单的来说,Slush 就是一个脚手架生成工具。什么?脚手架?这是什么鬼?嗯,脚手架嘛,自然是这个样子咯~
什么?你问的是编程中的脚手架呀?啊,这么说吧。身为一个前端开发者,每次新建一个项目的时候是不是要创建好多个文件夹、配置文件?写个文档是不是要创建好多个目录?然而每个项目的结构和配置文件都大同小异,是不是早已繁琐感觉人生无望,失去了活着的意义?
就在这个时候,Slush 横空出世,能够让你轻松搞定这些繁琐的事情,重新找回人生的意义,你就说吼不吼啊。从此麻麻再也不用担心我整天都在忙着创建文件夹啦。
道理我都懂,可我大 Yeoman 用的好好的,为什么要换新?
嗯。Yeoman 确实也是一个很好用的脚手架工具,历史悠久。然而它以 Grunt 为基础工具,上手难度大大提高。在轮子层出不穷的前端领域早已是风前残烛。而 Slush 则是基于 Gulp 的 『流式』思想作为基础工具,当你在做定制化脚手架时,Gulp 简单易用的特点则能让你轻轻松松搞定。
噢,这么屌?那该怎么用呢?
说了这么多,我到底该怎么用?
好啦,废话不多说啦,我们赶紧来趁着这个热乎劲看看怎么使用吧。
1. 安装 slush
首先,你得有 NodeJS 环境,什么?连 NodeJS 都没装?赶紧回家洗洗睡吧。如果你已经有了呢,你就可以通过 npm 直接将 slush 安装到全局环境下啦:
安装完了之后,你可以执行下面这行命令来确保安装成功:
如果你能看到输出了一个版本号,就说明已经安装成功啦。下面我们就来看一下如何使用吧。
2. 安装第三方脚手架
在使用 slush 创建项目之前,你得先安装一些别人开发好的脚手架。安装好脚手架之后才能根据脚手架生成约定好的项目结构哟。
咦?不知道有什么脚手架?快来 大厅 里找找吧。
很好,你已经找到了自己喜欢的脚手架了,我们快来安装它吧。打住,提醒你一下,脚手架要安装到全局环境下才有效哟。
3. 开始生成项目吧
现在我们已经安装好需要的一切了,终于可以开始创建项目啦。
首先,创建一个项目文件夹并进入文件夹中:
其次,执行 slush 生成命令:
react-starter-kit
是什么鬼?我们安装的明明是slush-react-starter-kit
呀。没错,在生成项目的时候,slush 后面跟的脚手架名字中是不带slush
关键词的。就是这么任性。没找到好使的,宝宝想要自定义怎么办?
当然了,可能你翻遍了整个大厅都没找到自己想要的,迫切想要自己定制一个脚手架怎么办呢?且听我慢慢道来。
其实很简单啦,Slush 脚手架就是一个普通的 npm package,唯一需要注意的有这么几点:
slush-*
的方式slushfile.js
文件templates
文件夹中假设你已经按照上面这些约定做好了准备工作,那么接下来我们就可以搞一件大新闻啦。
第一步:创建模板文件
首先,你要将模板文件(就是运行脚手架之后生成的项目文件)全部放到
templates
文件夹中第二步:在 slushfile.js 文件中编写任务流。
前面已经说到 Slush 是基于 Gulp 作为基础工具的,所以你只需要按照 Gulp 的使用方法在
slushfile.js
编写任务流就可以啦。咦,好像有点不太对,既然是用 Gulp,那么
gulpfile.js
文件呢?这里确实是不需要
gulpfile.js
文件啦,因为 Gulp 任务都在slushfile.js
文件中写啦,Slush 会帮你自动驱动 Gulp 的啦。好了,那么
slushfile.js
文件中的到底该怎么写呢?放着我来,小哥亲自给你示范一下:PS: 去哪里发现诸如
[inquirer](https://github.com/SBoudrias/Inquirer.js)
这么好用的 package 呢?你可以关注下 github.com/sqrthree/awesome-npm-packages 哟。现在就已经搞定啦,接下来怎么使用呢?因为 Slush 调用的是全局环境下的脚手架,但是目前我们的脚手架并不在全局环境中,然而你还没发布这个脚手架,不能直接工作
npm install -g
进行全局安装,所以显然是不!能!用!啦!哈!哈!哈!别着急砸电脑嘛,我们还有一个办法捏。那就是通过
npm link
命令将当前脚手架挂载到全局环境中啦。你只需要在当前文件夹中执行npm link
,搞定,收工(前提是package.json
已经写好)。然后就可以随便找个文件夹安装我们上面说的方法使用脚手架啦。生成 Slush 脚手架的脚手架
尽管自定义一个脚手架已经非常方便了,但是细心的你会发现几乎每个脚手架之间
slushfile.js
也都大同小异,只是templates
文件夹中的模板文件不一样,所以呢,你懂得😉。slush-generator 就是这么一个让我们来生成 Slush 脚手架的脚手架。有了它,创建自定义脚手架的时候异常方便。
第一步:安装 slush-generator
第二步:创建并进入自定义脚手架的文件夹
第三步:运行任务:
之后会让你回答一些问题,在回答过之后,你的自定义脚手架目录就已经生成好啦。接下来只需要在
templates
文件夹中放置你需要的文件就好了。查看已经安装好的脚手架
直接输入
slush
即可看到已经安装过的脚手架:怎么样?是不是已经迫不及待的想要尝试了?
喔,对了,少侠留步,差点忘了告诉你一件事情: