Windows Grunt.js在使用监视任务时生成一个新的节点进程
当使用Grunt的监视任务时,Grunt.js显然正在生成一个新的node.js进程: 一旦我保存了我的文档,就会执行默认任务(正如您在视频中看到的那样),突然有一个新的node.exe进程 这是我的Grunfile:Windows Grunt.js在使用监视任务时生成一个新的节点进程,windows,node.js,gruntjs,Windows,Node.js,Gruntjs,当使用Grunt的监视任务时,Grunt.js显然正在生成一个新的node.js进程: 一旦我保存了我的文档,就会执行默认任务(正如您在视频中看到的那样),突然有一个新的node.exe进程 这是我的Grunfile: module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-compress'); gr
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-text-replace');
grunt.loadNpmTasks('grunt-yui-compressor');
// Project configuration.
grunt.initConfig({
// Metadata.
meta: {
version: '1.0',
},
banner: '/*! Copyright (c) <%= grunt.template.today("yyyy") %> */\n',
// Task configuration.
concat: {
options: {
banner: '<%= banner %>',
stripBanners: true
},
develop: {
src: ['js/app.main.js', 'js/app/*.js', 'js/app.debug.js', 'js/app.workarounds.js', 'js/app.init.js'],
dest: 'build/js/app.js'
},
production: {
src: ['js/app.main.js', 'js/app/*.js', 'js/app.workarounds.js', 'js/app.init.js'],
dest: 'build/js/app.js'
},
habla_css: {
src: ['build/habla.css'],
dest: 'build/habla.css'
},
wiwo_css: {
src: ['build/wiwo.css'],
dest: 'build/wiwo.css'
},
iefix: {
src: 'js/iefix/*',
dest: 'build/js/iefix.js'
},
libs: {
src: ['js/src/*'],
dest: 'build/js/libs.js'
}
},
clean: {
pre: [
'build'
],
post: 'dest'
},
copy: {
thirdparty: {
files: [
{
expand: true,
src: ['js/jquery.min.js'],
dest: 'build/',
}]
}
},
min: {
options: {
report: false,
banner: '<%= banner %>'
},
app: {
src: ['build/js/app.js'],
dest: 'build/js/app.min.js'
},
iefix: {
src: 'js/iefix.js',
dest: 'build/js/iefix.min.js'
},
libs: {
src: ['js/src/*'],
dest: 'build/js/libs.min.js'
},
},
cssmin: {
options: {
report: false,
banner: '<%= banner %>'
},
icons: {
src: ['build/icons.css'],
dest: 'build/icons.min.css'
},
habla: {
src: ['build/habla.css'],
dest: 'build/habla.min.css'
},
wiwo: {
src: ['build/wiwo.css'],
dest: 'build/wiwo.min.css'
}
},
less: {
icons: {
src: ['less/system/icons.less'],
dest: 'build/icons.css'
},
habla: {
src: ['less/habla.less'],
dest: 'build/habla.css'
},
wiwo: {
src: ['less/wiwo.less'],
dest: 'build/wiwo.css'
}
},
replace: {
production: {
src: 'build/js/app.js',
dest: 'build/js/app.js',
replacements: [{
from: /\s*App.debug.(log|group|groupEnd)\(.*\);/g,
to: ''
},
{
from: 'debug: true',
to: 'debug: false'
}]
},
date: {
src: 'build/js/app.js',
dest: 'build/js/app.js',
replacements: [{
from: '/*!%CURDATE%*/',
to: 'console.log("' + d.replace(/(T|Z)/gi,' ') + '");'
}]
}
},
qunit: {
files: ['tests/**/*.html']
},
watch: {
main: {
files: ['grunt.js', 'js/app.*.js', 'js/**/*', 'less/**/*', 'less/*'],
tasks: ['default'],
options: {
nospawn: true
}
}
}
});
grunt.registerTask('con', ['concat:habla_css', 'concat:wiwo_css', 'concat:iefix', 'concat:libs']);
grunt.registerTask('icons', ['less:icons cssmin:icons']);
grunt.registerTask('test', ['qunit']);
// Default task.
grunt.registerTask('default', ['less:habla', 'less:wiwo', 'concat:develop', 'con', 'replace:date', 'copy:thirdparty', 'clean:post', 'watch']);
grunt.registerTask('release', ['clean:pre', 'less', 'concat:production', 'con', 'replace:production', 'copy:thirdparty', 'min', 'cssmin', 'clean:post']);
};
module.exports=函数(grunt){
grunt.loadNpmTasks(“grunt-contrib-clean”);
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.loadNpmTasks(“grunt-contrib-concat”);
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks(“grunt-contrib-less”);
grunt.loadNpmTasks(“grunt-contrib-qunit”);
grunt.loadNpmTasks(“grunt-contrib-watch”);
grunt.loadNpmTasks('grunt-text-replace');
grunt.loadNpmTasks(“grunt-yui-compressor”);
//项目配置。
grunt.initConfig({
//元数据。
元:{
版本:“1.0”,
},
横幅:'/*!版权所有(c)*/\n',
//任务配置。
康卡特:{
选项:{
横幅:'',
条幅:真的吗
},
发展:{
src:['js/app.main.js','js/app/*.js','js/app.debug.js','js/app.workarounds.js','js/app.init.js'],
dest:'build/js/app.js'
},
制作:{
src:['js/app.main.js','js/app/*.js','js/app.workarounds.js','js/app.init.js'],
dest:'build/js/app.js'
},
哈布拉乌斯:{
src:['build/habla.css'],
dest:'build/habla.css'
},
wiwo_css:{
src:['build/wiwo.css'],
dest:'build/wiwo.css'
},
iefix:{
src:'js/iefix/*',
dest:'build/js/iefix.js'
},
libs:{
src:['js/src/*'],
dest:'build/js/libs.js'
}
},
清洁:{
前:[
“建造”
],
帖子:“dest”
},
副本:{
第三方:{
档案:[
{
是的,
src:['js/jquery.min.js'],
dest:'build/',
}]
}
},
最小值:{
选项:{
报告:假,,
横幅:“”
},
应用程序:{
src:['build/js/app.js'],
dest:'build/js/app.min.js'
},
iefix:{
src:'js/iefix.js',
dest:'build/js/iefix.min.js'
},
libs:{
src:['js/src/*'],
dest:'build/js/libs.min.js'
},
},
cssmin:{
选项:{
报告:假,,
横幅:“”
},
图标:{
src:['build/icons.css'],
dest:'build/icons.min.css'
},
哈布拉:{
src:['build/habla.css'],
dest:'build/habla.min.css'
},
wiwo:{
src:['build/wiwo.css'],
dest:'build/wiwo.min.css'
}
},
减:{
图标:{
src:['less/system/icons.less'],
dest:'build/icons.css'
},
哈布拉:{
src:['less/habla.less'],
dest:'build/habla.css'
},
wiwo:{
src:['less/wiwo.less'],
dest:'build/wiwo.css'
}
},
替换:{
制作:{
src:'build/js/app.js',
dest:'build/js/app.js',
替换:[{
发件人:/\s*App.debug.(日志| group | groupEnd)\(.*);/g,
至:“”
},
{
from:“debug:true”,
至:“调试:错误”
}]
},
日期:{
src:'build/js/app.js',
dest:'build/js/app.js',
替换:[{
发件人:'/*!%CURDATE%*/',
to:'console.log(“'+d.replace(/(T|Z)/gi,”)+”;'
}]
}
},
昆特:{
文件:['tests/***/.html']
},
观察:{
主要内容:{
文件:['grunt.js'、'js/app.*.js'、'js/***/*'、'less/***'、'less/*'],
任务:['default'],
选项:{
nospawn:是的
}
}
}
});
grunt.registerTask('con',['concat:habla_css','concat:wiwo_css','concat:iefix','concat:libs']);
registerTask('icons',['less:icons-cssmin:icons']);
grunt.registerTask('test',['qunit']);
//默认任务。
registerTask('default'、['less:habla'、'less:wiwo'、'concat:develope'、'con'、'replace:date'、'copy:thirdparty'、'clean:post'、'watch']);
grunt.registerTask('release',['clean:pre','less','concat:production','con','replace:production','copy:thirdparty','min','cssmin','clean:post']);
};
那么它是一个咕噜虫还是我的咕噜文件中的一个虫?在Windows 7 x64上,我使用的grunt版本是0.4.1(+grunt cli 0.1.9)。在默认任务序列中,您不应该将
'watch'
作为最终任务。监视配置调用默认值,然后每次生成另一个监视任务。这条线就是问题所在:
grunt.registerTask('default', ['less:habla', 'less:wiwo', 'concat:develop', 'con', 'replace:date', 'copy:thirdparty', 'clean:post', 'watch']);
应该是这样的:
grunt.registerTask('default', ['less:habla', 'less:wiwo', 'concat:develop', 'con', 'replace:date', 'copy:thirdparty', 'clean:post']);
您只需运行grunt:watch
即可查看文件
如果您想运行默认的任务序列而不进行监视,那么只需运行grunt
即可。谢谢大家!
我对它进行了一点优化,这样我仍然可以运行grunt
watch: { main: { files: ['grunt.js', 'js/app.*.js', 'js/**/*', 'less/**/*', 'less/*'], tasks: ['develop'] } } grunt.registerTask('develop', ['less:habla', 'less:wiwo', 'concat:develop', 'con', 'replace:date', 'copy:thirdparty', 'clean:post']); grunt.registerTask('release', ['clean:pre', 'less', 'concat:production', 'con', 'replace:production', 'copy:thirdparty', 'min', 'cssmin', 'clean:post']); grunt.registerTask('default', ['develop', 'watch']);