wiper: 简单的命令行, livereload 服务器 + file watch - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bitinn
V2EX    Node.js

wiper: 简单的命令行, livereload 服务器 + file watch

  •  
  •   bitinn 2015-01-21 04:58:04 +08:00 3429 次点击
    这是一个创建于 3973 天前的主题,其中的信息可能已经有所发展或是发生改变。
    简单点说,就是把grunt-contrib-watch模块化成单独的命令行,理由如下:

    1. 最近越发觉得npm run其实比grunt和gulp什么的省事多了,看到没有类似的包,就拿tiny-lr和gaze做了个(两者都是grunt watch的底层库,可用性有保证)。

    2. 常见的livereload实现都是直接起个服务器,而我觉得没必要逼用户选express或koa,拆开之后,把插入script的工作交给其他模块,更方便开发。

    3. 太多watch命令不支持-w **/*.js,**/*.css的格式,大概是因为逗号可以当路径吧,但说实话有多少人在开发repo里这样做,以简单为主。

    有需要的可收藏与扩展。

    忘了加链接: https://github.com/bitinn/wiper

    PS:建议v2ex node节点改回白色算了,好歹md还能用……
    10 条回复    2015-02-21 02:31:19 +08:00
    yyfearth
        1
    yyfearth  
       2015-01-21 07:06:54 +08:00   1
    对于3 你可以做成 -w **/*.js -w **/*.css 这样
    另外最好可以支持配制文件 比如 .wiper.json 支持详细的参数 而且这样类似 make 你就可以不加任何参数运行

    其实我也自己做了一个类似的东西 整合 warth + livereload 和你不同的是 我做的本身就是一个http server
    而且支持 自动编译 coffee/less/jade 之类的模板

    不用grunt的原因是 grunt需要npm在项目里面安装一大堆的东西
    而我做的那个是一个独立的程序 可以在任何目录运行 不用安装额外的东西
    bitinn
        2
    bitinn  
    OP
       2015-01-21 14:10:42 +08:00
    @yyfearth 的确,但感觉不是很符合习惯,nodemon就是这样的看了半天文档才知道。

    wiper就是想模块化,避免增加太多功能或再跑一个完整的http server,然后在npm集成。例如:

    ```
    "cp:dev": "npm run cp:css:watch & npm run cp:js:watch & npm run cp:reload",
    "cp:reload": "wiper -p 30001 -w public/js/*.js,public/css/*.css",
    "cp:css:build": "lessc services/composer/composer.less | autoprefixer -o public/css/app.css",
    "cp:css:watch": "onchange 'services/composer/**/*.less' -- npm run cp:css:build",
    ```
    bitinn
        3
    bitinn  
    OP
       2015-01-21 14:13:45 +08:00
    如果不是为了模块化,一体化的livereload+watch+build+monitor解决方案倒不少,希望强大功能的,还可以看看browser-sync,当然强大功能的背后也是一个不省油的dev server。
    yyfearth
        4
    yyfearth  
       2015-01-21 15:54:08 +08:00
    一个简单的http server 也就几十行代码 而且可以做到自动注入js 和端口共用
    livereload server本身差不多也就百来行
    watch我也是自己用fs实现的 也就几十行吧

    不加compiler 之需要socket.IO一个依赖而已
    yyfearth
        5
    yyfearth  
       2015-01-21 15:57:18 +08:00
    其实现在我还是都用gulp了
    因为之前是自己有一小堆 小项目 结构都差不多 需要的东西基本上都一样
    我那样做确实比较方便

    但是现在我做项目的时候 每个项目差距还是比较大的
    很多build的task需要特别配置 甚至需要自己实现很多功能
    这样一来用grunt或者gulp这样可以高度自定义 而且每个项目相互独立配置
    确实比较好

    所以我自己的那个项目 更新了几个版本 自己都不用了
    bitinn
        6
    bitinn  
    OP
       2015-01-22 13:14:29 +08:00
    @yyfearth 写了两年grunt,我意识到npm可以20来行解决的东西,放到gruntfile里常是100来行。当然不是说grunt或gulp有多不好。只是我终于明白想substack等人的说法,不要一上来就用grunt,安装一堆插件,写一个巨大的gruntfile。很多时候npm即可。
    CosWind
        7
    CosWind  
       2015-01-22 14:40:11 +08:00
    额。。。glup也不要多少行。。
    devtiange
        8
    devtiange  
       2015-02-08 03:16:57 +08:00
    @bitinn 感谢楼主分享

    有个弱弱的问题:
    <script src="http://www.v2ex.com//localhost:1234/livereload.js?snipver=1"></script>
    这种语句加在html里面, 你是怎么做到dev的时候加, 正式build不加的? 能不能提供个基于npm流的思路? 谢谢!
    bitinn
        9
    bitinn  
    OP
       2015-02-21 00:45:31 +08:00
    @devtiange 用environment variable控制,例如写在npm里,根据环境不同使用不同的启动命令。获得值之后,if/else选择时候是否加载。

    http://stackoverflow.com/questions/4870328/how-to-read-environment-variable-in-node-js
    devtiange
        10
    devtiange  
       2015-02-21 02:31:19 +08:00
    @bitinn 所以必须要搭配 jade 或者 handlebars 这种模板咯? 可是我就想写.html 呢...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     840 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 21:31 PVG 05:31 LAX 13:31 JFK 16:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86