博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs直接调用grunt(非调用批处理)
阅读量:4516 次
发布时间:2019-06-08

本文共 1861 字,大约阅读时间需要 6 分钟。

在windows下,我们做js构建工作,都习惯安装grunt-cli,只需要命令行grunt。。。一切构建工作都自动完成了。这已经是很完美的情况了,不过最近要做一个服务器版的自动化构建系统,在nodejs中调用批处理执行grunt就显得很矬,而且各种问题。是否有更好,更漂亮的方式呢?

grunt本来就是nodejs程序,安装后表现为一个node_module,那么cli是什么呢?这只是一个nodejs写的命令行界面。所以,nodejs肯定可以直接在js层面调用grunt。

我们需要做的,只需要揭开cli的面纱。

首先,看看cli安装后的位置:

(win7)

C:\Users\kenkozheng\AppData\Roaming\npm\node_modules\grunt-cli

 

 cli主要代码是一堆参数判断处理,但最终实际关键点是grunt.cli( )

#!/usr/bin/env node'use strict';process.title = 'grunt';// Especially badass external libs.var findup = require('findup-sync');var resolve = require('resolve').sync;// Internal libs.var options = require('../lib/cli').options;var completion = require('../lib/completion');var info = require('../lib/info');var path = require('path');var basedir = process.cwd();var gruntpath;// Do stuff based on CLI options.if ('completion' in options) {  completion.print(options.completion);} else if (options.version) {  info.version();} else if (options.base && !options.gruntfile) {  basedir = path.resolve(options.base);} else if (options.gruntfile) {  basedir = path.resolve(path.dirname(options.gruntfile));}try {  gruntpath = resolve('grunt', {basedir: basedir});} catch (ex) {  gruntpath = findup('lib/grunt.js');  // No grunt install found!  if (!gruntpath) {    if (options.version) { process.exit(); }    if (options.help) { info.help(); }    info.fatal('Unable to find local grunt.', 99);  }}// Everything looks good. Require local grunt and run it.require(gruntpath).cli();

 

 

那么我们回到自己的nodejs项目中,先安装好grunt模块,然后在js代码中轻轻写上两句:

var grunt = require('grunt');console.log(grunt.cli);grunt.cli({    gruntfile: __dirname + '/applications/5/check_out/Gruntfile.js'});

 

 一切就搞掂了,非常顺利。

不过,这里有个小坑,折腾了kenko一点时间,就是gruntfile必须是绝对路径,不能是相对路径。

最后,不得不赞一下grunt的代码。如果我们不懂cli的参数,只需要console.log(grunt.cli),这不是冷冰冰的输出function(){xxxx},而是一份参数说明!!!不得不佩服作者的用心良苦。

转载于:https://www.cnblogs.com/kenkofox/p/4545789.html

你可能感兴趣的文章
SQL*Plus 系统变量之32 - NEWP[AGE]
查看>>
Spring配置文件总结
查看>>
4.三角形面积
查看>>
基础-事务
查看>>
MAC下安装与配置MySQL [转]
查看>>
ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignored
查看>>
爬虫入门【10】Pyspider框架简介及安装说明
查看>>
android面试(4)---文件存储
查看>>
(转载) 标准C中的字符串操作函数
查看>>
如何提高android串口kernel log等级
查看>>
C#中值类型和引用类型的区别
查看>>
python学习笔记15-执行环境
查看>>
thinkphp 框架两种模式 两种模式:开发调试模式、线上生产模式
查看>>
iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
查看>>
Docker快速配置指南
查看>>
Python基础---OS模块 (二)
查看>>
【JS点滴】substring和substr以及slice和splice的用法和区别。
查看>>
awk多模式匹配
查看>>
线段树
查看>>
[javascript]实现登陆界面拖动窗口
查看>>