【Grunt】关于Grunt可视化的尝试
使用Grunt遇到的问题?
- 必须要安装
NodeJS
- 必须安装
grunt-cli
- 需要编写复杂的
Gruntfile.js
规则 - 每个项目中必须存在nodejs的
grunt
模块 - 不方便管理每一个包含grunt的项目
- 无法快速开始一个项目
解决思路
- 直接把
NodeJS
跟grunt-cli
包含进去? - 弄个有UI的界面来管理?
- 用程序简化gruntfile的规则?
- 将所有项目中需要的grunt模块包含到一起?
- 默认内置一些常用功能模块?
解决方案 -- nodewebkit
- 集成了
nodejs
,省去NodeJS安装 - 集成
webkit
内核,方便编写界面 - 适合前端人员开发
- 一次开发,兼容三大平台window/mac/linux
遇到问题
一.如何让NodeJS运行Grunt?
利用NodeJS的spawn运行cmd命令
//切换运行环境到项目中
process.chdir("项目地址");
//执行grunt
require("child_process").spawn("grunt");这种方案最简单,但需要依赖
NodeJS
跟grunt-cli
将grunt-cli的模块直接引进代码中,利用nodejs调用
var gruntpath = "grunt.js的路径";
var grunt = require(gruntpath);
grunt.cli();直接运行,提示找不到gruntfile.js,修改grunt文件夹中的
task.js
,大概在430行左右var old_path = process.cwd();//获取当前工作目录
process.chdir('项目文件目录');//修改到项目目录
var gruntfile = allInit ? null : grunt.option('gruntfile') ||
grunt.file.findup('Gruntfile.{js,coffee}', {nocase: true});//查找gruntfile文件
process.chdir(old_path);//修改回程序目录
此处省略n行代码~~~
(grunt.option('npm') || []).forEach(task.loadNpmTasks);//加载npm的模块
process.chdir('项目文件目录');//切换到项目目录先切换到项目文件目录查找
gruntfile.js
文件,然后切换回程序目录查找node模块,运行完grunt后,程序自动退出了,囧,需要修改grunt下的exit.js
process.exit(0);//这句需要注释掉
二.如何在子进程中运行Grunt?
利用NodeJS的child_process.fork
var child = require("child_process").fork("child.js");
child.onmessage = function(data){
console.log(data);
}
child.on("exit",function(exitCode){
console.log(exitCode);
});--运行后提示:unzip the package xx/child.js,上网各种谷歌之后得出作者结论:
child_process.fork is broken
--囧,就是这个方法是不能用了?继续谷歌之后得知
child_process.fork是无法运行js文件,它是直接运行执行命令
nw 文件夹
,所以修改一下,在child
文件夹中也放一个package.json
文件,执行后,果然成功了。--然后又留下一个大问题,无法使用fork的通信接口,囧,最后只好用
tcp
来实现进程通信。--当我想打包成app测试的时候,发现,压根就不会运行子进程
child
因为child_process.fork是运行
nw
命令,所以,打包后是没有nw命令利用NodeJS的webworker来执行
npm install node-webworker
之后引用
worker.js
var Worker = require("worker.js");
var workker = new Worker("child.js");
worker.onmessage = function(data){
console.log(data);
}
worker.postmessage({msg:'hello'});运行后,发现child.js中的任何信息都无法传递回给父进程,最后发现在
worker.impl.buffer
中保存了相关信息。var timeId = setInterval(function(){
var msg = worker.impl.buffer;
if(!msg)return false;
console.log(msg);
worker.imple.buffer = "";
},1000);虽然很挫,但还是实现了功能了,打包测试,发现一切OK。发送到其它电脑测试,提示:
spawn node not found,就是需要执行的命令找不到
奇怪,我没调用
spawn
,哪来找不到?打开worker.js的源码查看,囧,发现:child_process.spawn("node xxx.js");
囧,原来它是执行了
node
的命令来实现子进程,坑爹了。利用HTML5的webworker
var worker = new Worker("child.js");
worker.onmessage = function(data){};
worker.postmessage("hello");测试后,发现成功运行,消息也正常接收,可...
webworker
不支持运行nodejs
代码,就是grunt无法跑起来。
三.目前可用方案
采用非子进程方式
- 无法同时跑多个grunt任务
- grunt没有提供结束的方法
- 需要手动清除grunt的watch任务以及很多变量值,比较麻烦
- 出错很可能会直接结束程序
独立将child内容打包成可执行文件,采用child_process.spawn执行
- 需要打开两个可执行文件,两个加起来至少也有80M
- 开发时,需要用fork,打包时候用spawn
安装NodeJS,采用webworker方式
- 电脑必须安装了NodeJs
- 目前较好的方案
- 未来nodewebkit支持子进程方式,可以比较方便修改过来
PS:暂时还没发现其它可以跑子进程方式,求其他大神解救
【Grunt】关于Grunt可视化的尝试的更多相关文章
- 关于Grunt可视化的尝试
关于Grunt可视化的尝试 使用Grunt遇到的问题? 必须要安装NodeJS 必须安装grunt-cli 需要编写复杂的Gruntfile.js规则 每个项目中必须存在nodejs的grunt模块 ...
- 杂项-Grunt:grunt build 打包和常见错误
ylbtech-杂项-Grunt:grunt build 打包和常见错误 1. 安装.打包返回顶部 1. npm WARN deprecated coffee-script@: CoffeeScrip ...
- 【grunt】grunt 基础学习
1. 干啥的呢? 项目打包管理,用处有 1)可用于压缩合并前端文件,包括css/js , 2)可用于管理发布文件与开发文件,3)可用于自动编译less 文件 2. 常用的东西有哪些呢? 常用的插件有 ...
- 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别
高效开发之SASS篇 作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...
- Grunt-cli的执行过程以及Grunt加载原理
通过本篇你可以了解到: 1 grunt-cli的执行原理 2 nodeJS中模块的加载过程 Grunt-cli原理 grunt-cli其实也是Node模块,它可以帮助我们在控制台中直接运行grunt命 ...
- 【GruntMate】一个让你更方便使用Grunt的工具
GruntMate是什么? 一个基于Grunt的项目管理可视化工具(还不知道Grunt是什么?可以谷歌一下就知道了!) GruntMate有哪些功能? 方便的管理基于Grunt的项目 方便统一管理Gr ...
- Grunt教程——初涉Grunt
前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为庞大和复杂,代码维护.打包.发布等流程也 变得极为繁琐,同时浪费的时间和精力也越来越多,当然人为的错误 ...
- 使用Grunt启动和运行
开始使用Grunt 大多数开发人员都一致认为,JavaScript开发的速度和节奏在过去的几年里已经相当惊人.不管是Backbone.js和Ember.js的框架还是JS Bin社区,这种语言的发展变 ...
- 【转】自动化任务运行器 Grunt 迅速上手
原文转自:http://blog.jobbole.com/51586/ 这篇文章将带领你用Grunt来提速和优化网站开发的流程.首先我们会简短介绍Grunt的功能,然后我们直接上手,介绍如何用Grun ...
随机推荐
- Linux 学习笔记(一)
Linux体系结构 下面是Linux体系结构的示意图: 在所有Linux版本中,都会涉及到以下几个重要概念: 内核:内核是操作系统的核心.内核直接与硬件交互,并处理大部分较低层的任务,如内存管理.进程 ...
- SqlServer 连接字符串多种配置
Application Name(应用程序名称):应用程序的名称.如果没有被指定的话,它的值为.NET SqlClient Data Provider(数据提供程序). AttachDBFilenam ...
- Android Studio 设置不自动缩进匿名内部类
Android Studio 会默认缩进匿名内部类代码,这让人感觉有些不大适应,可以使用下面的方法进行取消. 取消选中橙色框前的几个复选框即可.
- Windows下Git Bash中文乱码
文章转自:http://ideabean.iteye.com/blog/2007367 打开Git Bash 进入目录:$ cd /etc 1. 编辑 gitconfig 文件:$ vi gitcon ...
- dedecms无法创建rss文件,提示DedeTag Engine Create File False
最近有网友问dedecms无法创建rss文件提示:DedeTag Engine Create File False 这个提示一般出现以下情况才会出现:1.模板文件不存在,您可能误删除或者没有正确指定模 ...
- sql批量获取wordpress所有留言者的邮件地址
如果你的wordpress博客有很多读者互动的话,他们的留言都会留下具体的联系邮箱,我们如何批量导出这些联系信息呢?可以试试下面的sql语句 SELECT DISTINCT comment_autho ...
- Hadoop集群(第1期)_CentOS安装配置
CentOS 是什么? CentOS是一个基于Red Hat 企业级 Linux 提供的可自由使用的源代码企业级的 Linux 发行版本.每个版本的 CentOS 都会获得七年的支持(通过安全更新方式 ...
- C语言内存对齐详解(3)
接上一篇:C语言内存对齐详解(2) 在minix的stdarg.h文件中,定义了如下一个宏: /* Amount of space required in an argument list for a ...
- Android开源项目第二篇——工具库篇
本文为那些不错的Android开源项目第二篇——开发工具库篇,**主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容 ...
- puppet 安装
yum源配置 1. wget http://ftp.kaist.ac.kr/fedora//epel/6/i386/epel-release-6-8.noarch.rpm 2. yum list | ...