Articles of gruntjs

使用Grunt(Yeoman)的多个构build文件夹(多个客户端,多个任务,多个目标)

我正在构build一个项目,它将是一个webapp(浏览器可运行)和一个Phonegap应用程序(iOS和Android)。 尽pipe我的项目在理论上可以使用我的Yeoman生成的相同的dist文件夹,但是Grunt任务通过运行grunt build build生产就绪代码。 我想运行一些像grunt build_web , grunt build_ios和grunt build_android ,为每个平台单独构build生产代码。 或grunt build:web , grunt build:ios , grunt build:android 。 这样,我可以自定义一些加载的脚本,图像等,每个都有自己的构build指令。 那么,我是否应该通过我的Gruntfile复制粘贴所有的dist并负责任地build指令? 或者,对此有最佳做法吗? (试过这个,没有工作) Yeoman伙计,这可能吗? 这是我目前的Gruntfile.js ,以防万一。 'use strict'; var LIVERELOAD_PORT = 35729; var lrSnippet = require('connect-livereload')({port: LIVERELOAD_PORT}); var mountFolder = function (connect, dir) { return connect.static(require('path').resolve(dir)); }; // # Globbing // for performance reasons […]

在部署Grunt应用程序到heroku时,NPM不会安装模块依赖项

我使用grunt制作了一个静态单页面网站。 我现在正在尝试使用heroku buildpack将其部署到heroku,以用于节点咕噜声。 以下是我的根目录的图片: 这是我的Gruntfile,package.json和Procfile: https://gist.github.com/callumflack/8038464 https://gist.github.com/callumflack/8038483 web:node index.html 当我$ git push heroku master它到Gruntfile并失败: —–> Found Gruntfile, running grunt heroku:production task >> Local Npm module "grunt-contrib-uglify" not found. Is it installed? 上述错误继续列出所有本地NPM模块为未find。 如果我列出所有的loadNpmTasks而不是使用“load-grunt-tasks”,我会得到完全相同的错误。 当我$ heroku logs我得到: Starting process with command `node web.js` Error: Cannot find module '/app/web.js' 任何人都可以看到我哪里出了错?

如何使Grunt等待任务完成后再运行另一个?

这是我的Gruntfile和输出 。 正如您在输出中看到的那样,有几个与asynchronous任务相关的问题: imagemin被称为,下一个直线前进。 这使得它的输出出现在任务的最后,有什么相当混乱的; build ,这是一个自定义任务,使用var done = this.async()并在完成命令后调用done() ; 但是,如果我单独运行任务,这只能正常工作。 用另一个任务运行它也会使其运行asynchronous; 随着build运行后, jasmine没有什么可testing,因此是无用的。 有没有办法解决这个问题?

获取grunt-express重新启动更改

我正在尝试使用grunt-express和grunt-watch。 我想服务器重新加载,我改变我的服务器文件。 这是我得到的。 Gruntfile.js var path = require('path'); module.exports = function(grunt) { grunt.initConfig({ express: { options: { port: 8000 }, load: { server: path.resolve('./app') } }, watch: { express: { files: ['app.js'], tasks: ['express:load'] } } }); grunt.loadNpmTasks('grunt-karma'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-express'); grunt.registerTask('server', ['express:load', 'express-keepalive', 'watch']); }; app.js var express = require('express'); var app = express(); var […]

如果助手离开,如何从Grunt中的代码调用任务

咕噜是删除帮手,这已经发生在grunt-contrib。 然而,我有一个Grunt文件依靠一些自定义任务调用一些帮助。 没有帮手的话就打破了。 我只是想知道什么应该是正确的方法来取代这些。 我得到它将通过以某种方式直接调用任务,但我不知道如何。 一个例子会帮助很多,因为Grunt文档还没有更新。 谢谢。

如何使用摩卡生成多个报告?

我想要有以下报告: 覆盖 规范 的xUnit 所有在我的咕噜声中执行的一个摩卡执行 目前 – 我必须运行testing3次,每次生成一个不同的报告(!)。 所以我用2个configuration的grunt-mocha-test (只有记者不同)(一次xunit-file和一次spec)。 然后我又有grunt-mocha-istanbul再次运行testing,并生成覆盖报告。 我试过使用 { options: { reporters : ['xunit-file', 'spec'] } } 对于grunt-mocha-test ,至less把它降到2,但这并不是工作。 阅读grunt-mocha-istanbul文档,我似乎无法find关于reporterconfiguration的任何信息。 我该如何解决这个问题?

Grunt Globbing模式

什么是需要实现以下模式。 匹配目录.tmp中的所有html文件 匹配.tmp / views及其所有子目录中的所有html文件(recursion到任何深度) 这是在Grunt文件中注册livereload任务。 我尝试了以下configuration的几个品种。 它匹配.tmp中的所有文件,但不能在.tmp/viewsrecursion地匹配 还试过, '.tmp/{,views/**/}*.html' 但结果相同。 livereload: { options: { livereload: LIVERELOAD_PORT }, files: [ '.tmp/{,views/**}*.html' ] }

如何testing一个Grunt任务? 理解和最佳实践

理解如何编写复杂的Gruntfile.js并在testing中使用它,我有点Gruntfile.js 。 我是否正确使用Grunt? 我想问社区的帮助,并以另一种方式作出贡献。 我正在为Grunt写一个新的任务 ,并希望在Github和npm上为广泛的读者推出它。 我想为这个任务进行自动化testing(我想学习如何正确执行)。 我想testing不同的选项组合(现在大约15个)。 所以,我应该多次: 运行清理 运行我的任务设置下一个选项 运行testing并将选项对象传递给testing 一些非工作代码,以便更好地理解: Gruntfile: grunt.initConfig({ test_my_task: { testBasic: { options: { //first set } }, testIgnore: { options: { //another set } }, //… } clean: { tests: ['tmp'] // mmm… clean test directory }, // mmm… unit tests. nodeunit: { tests: ['test/*.js'] //tests code […]

咕噜茉莉节点testing运行两次

我设置了grunt来运行node.js茉莉花testing。 出于某种原因,使用此configuration,结果总是显示双倍的testing。 这是我的configuration: 我正在使用插入grunt的茉莉花节点 。 /spec/some-spec.js : var myModule = require('../src/myModule.js'); describe('test', function(){ it('works', function(done){ setTimeout(function(){ expect(1).toBe(1); done(); }, 100); }); }); Gruntfile.js : module.exports = function(grunt) { grunt.initConfig({ jasmine_node: { options: { forceExit: true }, all: ['spec/'] } }); grunt.loadNpmTasks('grunt-jasmine-node'); grunt.registerTask('default', ['jasmine_node']); }; 这导致两个testing运行,而不是一个。 > grunt Running "jasmine_node:all" (jasmine_node) task .. Finished in 0.216 […]

节点Gruntasynchronous任务循环与闭合不起作用

预先感谢您看看这个。 我有一个循环中的asynchronous任务不工作。 我已经确定: 将我的循环variables“key”封装在闭包中,以避免经典的“仅限最后一个值”的问题,循环在asynchronous任务返回一个值之前完成很长时间,只显示最后一个值。 调用完成(错误)完成我的asynchronous任务(根据Gruntjs常见问题解答) 使用hasOwnProperty()来确保键是对象的实际属性,而不是来自原型。 遵循node.exec例子的格式,除了把exec的值赋给一个variables – 我试过了,但是没有帮助。 见下面的第一个参考。 这个函数输出…什么都没有! 出于某种原因,grunt.log.writeln语句甚至没有发射。 任务完成没有错误。 我还尝试添加20秒的延迟,以防脚本在asynchronous任务返回之前完成。 奇怪的是,如果我不叫“完成(错误),”文件被写入文件(当我用grunt.file.write语句replacewriteln的)。 var done = this.async(), exec = require('child_process').exec, myJSON = { "file1" : "C:/home/me/jquery.js", "file2 " : "C:/home/me/grunt.js", … "fileN" : "C:/home/me/N.js" }, count; for (var key in myJSON) { if (myJSON.hasOwnProperty(key)) { (function (key) { exec( 'type "' + myJSON[key] […]