Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

grunt

gruntjs3.1mMIT1.6.1TypeScript support: definitely-typed

The JavaScript Task Runner

task, async, cli, minify, uglify, build, lodash, unit, test, qunit, nodeunit, server, init, scaffold, make, jake, tool

readme

Grunt: The JavaScript Task Runner

Build Status: Linux Build Status: Windows Built with Grunt FOSSA Status

Documentation

Visit the gruntjs.com website for all the things.

Support / Contributing

Before you make an issue, please read our Contributing guide.

Release History

See the CHANGELOG.

License

MIT

changelog

v1.6.1 date: 2023-01-31 changes:

- Downgrades to glob 7 for Windows compatability
- Removes mkdirp and rimraf in favour of node.js APIs.

v1.6.0 date: 2023-01-28 changes:

- Requires node.js 16+.
- template.date now uses dateformat ~4.6.2.
- other dependency updates such as glob, rimraf, etc.

v1.5.3 date: 2022-04-23 changes:

- Patch up race condition in symlink copying.

v1.5.2 date: 2022-04-12 changes:

- Unlink symlinks when copy destination is a symlink.

v1.5.1 date: 2022-04-11 changes:

- Fixed symlink destination handling.

v1.5.0 date: 2022-04-10 changes:

- Updated dependencies.
- Add symlink handling for copying files.

v1.4.1 date: 2021-05-24 changes:

- Fix --preload option to be a known option
- Switch to GitHub Actions

v1.4.0 date: 2021-04-21 changes:

- Security fixes in production and dev dependencies
- Liftup/Liftoff upgrade breaking change. Update your scripts to use --preload instead of --require. Ref: https://github.com/js-cli/js-liftoff/commit/e7a969d6706e730d90abb4e24d3cb4d3bce06ddb.

v1.3.0 date: 2020-08-18 changes:

- Switch to use `safeLoad` for loading YML files via `file.readYAML`.
- Upgrade legacy-log to ~3.0.0.
- Upgrade legacy-util to ~2.0.0.

v1.2.1 date: 2020-07-07 changes:

- Remove path-is-absolute dependency.
  (PR: https://github.com/gruntjs/grunt/pull/1715)

v1.2.0 date: 2020-07-03 changes:

- Allow usage of grunt plugins that are located in any location that
  is visible to Node.js and NPM, instead of node_modules directly
  inside package that have a dev dependency to these plugins.
  (PR: https://github.com/gruntjs/grunt/pull/1677)
- Removed coffeescript from dependencies. To ease transition, if
  coffeescript is still around, Grunt will attempt to load it.
  If it is not, and the user loads a CoffeeScript file,
  Grunt will print a useful error indicating that the
  coffeescript package should be installed as a dev dependency.
  This is considerably more user-friendly than dropping the require entirely,
  but doing so is feasible with the latest grunt-cli as users
  may simply use grunt --require coffeescript/register.
  (PR: https://github.com/gruntjs/grunt/pull/1675)
- Exposes Grunt Option keys for ease of use.
  (PR: https://github.com/gruntjs/grunt/pull/1570)
- Avoiding infinite loop on very long command names.
  (PR: https://github.com/gruntjs/grunt/pull/1697)

v1.1.0 date: 2020-03-16 changes:

- Update to mkdirp ~1.0.3
- Only support versions of Node >= 8

v1.0.4 date: 2019-04-22 changes:

- Update js-yaml to address https://npmjs.com/advisories/788
- Use SOURCE_DATE_EPOCH to render dates in template.

v1.0.3 date: 2018-06-03 changes:

- Drop support for Node 0.10 and 0.12.
- Dependency updates: rimraf, grunt-legacy-log, grunt-legacy-util.
- Fix race condition with file.mkdir.

v1.0.2 date: 2018-02-07 changes:

- Fix for readYAML error messages.
- Remove deprecation warning for coffeescript. Pull #1621.

v1.0.1 date: 2016-04-05 changes:

- minor fix for npm issues when installing grunt and grunt-cli at the same time. Pull #1500.

v1.0.0 date: 2016-04-04 changes:

- full list of changes is on http://gruntjs.com, please also see changes from 1.0.0-rc1.
- if you have a Grunt plugin that includes `grunt` in the `peerDependencies`,
  we recommend tagging with `"grunt": "">= 0.4.0"` and publishing a new version on npm.
- Prevent async callback from being called multiple times. Pull #1464.
- Update copyright to jQuery Foundation and remove redundant headers. Fixes #1478.
- Update glob to 7.0.x. Fixes #1467.
- Removing duplicate BOM strip code. Pull #1482.
- Update legacy log and util to 1.0.0.
- Update to latest cli ~1.2.0.
- Use grunt-known-options for shared options between Grunt and grunt-cli.

v1.0.0-rc1 date: 2016-02-11 changes:

- full list of changes is on http://gruntjs.com
- if you have a Grunt plugin that includes `grunt` in the `peerDependencies`,
  we recommend tagging with `"grunt": "">= 0.4.0"`
- `coffee-script` is upgraded to `~1.10.0` which could incur breaking changes
  when using the language with plugins and Gruntfiles.
- `nopt` is upgraded to `~3.0.6` which has fixed many issues, including passing
  multiple arguments and dealing with numbers as options. Be aware previously
  `--foo bar` used to pass the value `'bar'` to the option `foo`. It will now
  set the option `foo` to `true` and run the task `bar`.
-`glob` is upgraded to `~6.0.4` and `minimatch` is upgraded to `~3.0.0`. Results
  are now sorted by default with `grunt.file.expandMapping()`. Pass the
  `nosort: true` option if you don't want the results to be sorted.
- `lodash` was upgraded to `~4.3.0`. Many changes have occurred. Some of which
  that directly effect Grunt are `grunt.util._.template()` returns a compile
  function and `grunt.util._.flatten` no longer flattens deeply.
  `grunt.util._` is deprecated and we highly encourage you to
  `npm install lodash` and `var _ = require('lodash')` to use `lodash`.
  Please see the lodash changelog for a full list of changes: https://github.com/lodash/lodash/wiki/Changelog
- `iconv-lite` is upgraded to `~0.4.13` and strips the BOM by default.
- `js-yaml` is upgraded to `~3.5.2` and may affect `grunt.file.readYAML`.
  We encourage you to please `npm install js-yaml` and use
  `var YAML = require('js-yaml')` directly in case of future deprecations.
- A file `mode` option can be passed into
  [grunt.file.write()](http://gruntjs.com/api/grunt.file#grunt.file.write).
- `Done, without errors.` was changed to `Done.` to avoid failing by mistake
  on the word `errors`.

v0.4.5: date: 2014-05-12 changes:

- Updated rimraf to 2.2.8. Closes gh-1134.
- Moved grunt.log into separate grunt-legacy-log module.
- Updated grunt-legacy-util to 0.2.0. Closes gh-971, gh-1129, gh-1118.
- Added grunt.task.exists method to check if a task exists. Closes gh-1131.
- Added grunt.config.merge method to deep merge config data. See gh-1039.
- Fixed symlink issues with 'file.isPathCwd' and 'file.doesPathContain'. Closes gh-1112.
- Config and util.recurse no longer mangle Buffer instances. See gh-971.
- Config and util.recurse now enumerate inherited object properties. See gh-1129.
- Config and util.recurse now throw useful circular reference error. See gh-1118.
- Warn instead of error when no new tasks found via '.loadTasks' method. Closes gh-1059.
- Added Windows CI testing. Closes gh-1110.
- Removed "CONTRIBUTING.md" from .npmignore. Closes gh-1093.

v0.4.4: date: 2014-03-12 changes:

- Only signal completion of tasks async if grunt.task.start is invoked with `{asyncDone:true}`.

v0.4.3: date: 2014-03-07 changes:

- When devving Grunt, do "npm install && npm uninstall grunt" (isaacs/npm#3958)
- Grunt is now tested on Node.js 0.11
- Extracted internal "util" lib to "grunt-legacy-util" lib
- task.normalizeMultiTaskFiles now flattens nested "files" arrays. Closes gh-1034.
- Better error in renameTask if task doesn't exist. Closes gh-1058.
- Update rimraf to latest version. Closes gh-1043.
- Empty string "ext" should strip extension. Closes gh-1087.
- Add expandMapping .extDot option. Can be 'first' or 'last' but defaults to 'first'. Closes gh-979.
- Add default array for util.spawn optional args. Closes gh-1064.
- util.spawn "grunt" option now uses proper Node, passes Node exec options. Closes gh-980, gh-981, gh-877.
- Make all tasks asynchronous to reduce call stack. Closes gh-1026.
- Fix <%= grunt.task.current.target %> in Multitask files. Closes gh-994.
- Generalize cli tests, see gh-983, gh-991.
- --debug option can optionally be Boolean. Closes Gh-983, gh-991.

v0.4.2: date: 2013-11-21 changes:

- Extract internal "namespace" lib to external "getobject" lib.
- '"Grunt collections" are now deprecated, use peerDependencies. See "grunt-contrib" 0.8.0 for details.'
- Fix stdout / stderr issues on Windows. Closes gh-940, gh-921, gh-744, gh-792, gh-644, gh-708.
- Fix pipe-redirecting on Windows. Closes gh-510.
- Fixed this.options() in renamed basic tasks. Closes gh-855.
- Update underscore.string dependency to follow semver. Closes gh-886.
- Output task options in verbose mode. Closes gh-749.
- Add file.preserveBOM property. Closes gh-806, gh-937.
- Test that file methods warn. Closes gh-909.
- Fixed a few spelling errors in code comments. Closes gh-849.
- Updated watch, jshint and nodeunit deps. Closes gh-914.

v0.4.1: date: 2013-03-13 changes:

- Fix path.join thrown errors with expandMapping rename. Closes gh-725.
- Update copyright date to 2013. Closes gh-660.
- Remove some side effects from manually requiring Grunt. Closes gh-605.
- "grunt.log: add formatting support and implicitly cast msg to a string. Closes gh-703."
- Update js-yaml to version 2. Closes gh-683.
- The grunt.util.spawn method now falls back to stdout when the `grunt` option is set. Closes gh-691.
- Making --verbose "Files:" warnings less scary. Closes gh-657.
- "Fixing typo: the grunt.fatal method now defaults to FATAL_ERROR. Closes gh-656, gh-707."
- Removed a duplicate line. Closes gh-702.
- Gruntfile name should no longer be case sensitive. Closes gh-685.
- The grunt.file.delete method warns and returns false if file doesn't exist. Closes gh-635, gh-714.
- The grunt.package property is now resolved via require(). Closes gh-704.
- The grunt.util.spawn method no longer breaks on multibyte stdio. Closes gh-710.
- Fix "path.join arguments must be strings" error in file.expand/recurse when options.cwd is not set. Closes gh-722.
- Adding a fairly relevant keyword to package.json (task).

v0.4.0: date: 2013-02-18 changes:

- Initial release of 0.4.0.
- See http://gruntjs.com/upgrading-from-0.3-to-0.4 for a list of changes / migration guide.