Home Web Front-end JS Tutorial js modular development—Gruntfile.js detailed explanation

js modular development—Gruntfile.js detailed explanation

Nov 28, 2019 pm 03:38 PM
Modular

js modular development—Gruntfile.js detailed explanation

1. Introduction to grunt module

The grunt plug-in is an automation tool in the npm environment. For tasks that need to be repeated repeatedly, such as compression, compilation, unit testing, linting, etc., automated tools can reduce your labor and simplify your work. The grunt module performs tasks based on the configuration in the Gruntfile.js file.
If the following command is defined in package.json:

[Related course recommendations: JavaScript video tutorial]

"scripts": {
    "build": "npm install && grunt"
}
Copy after login

Because runningnpm run build Some modules defined in devDependencies will be installed first, then running the npm run build command is equivalent to doing the following:

● npm install grunt-cli -g

● npm install

● grunt

2. Structure of gruntfile.js:

● "wrapper" function

● Project and task configuration

● Loading grunt plug-ins and tasks

● Custom tasks

3. "wrapper" function

Each copy of Gruntfile.js ( and grunt plug-in) follow the same format. The Grunt code you write must be placed within this function:

module.exports = function(grunt){
         //do grunt-related things in here
}
Copy after login

4. Project and task configuration

Most of All Grunt tasks rely on certain configuration data. We configure the parameters of the Grunt task through the grunt.initConfig method.
The parameter of the grunt.initConfig method is a JSON object. You can store any data in this configuration object. Additionally, since this is JavaScript, you can use any valid JS code here. You can even use <% %> template string to refer to already configured properties, for example:

// 项目和任务配置
grunt.initConfig({
  pkg: grunt.file.readJSON('package.json'), //获取 package.json 中的元数据(js代码)
  proj:{
    name:'hello',
    description:'a hello demo'
  },
  hello: {
    options: {
      name: '<%= proj.name %>'  //用<% %>模板字符串匹配hello
    },
    srcs: ['1.txt', '2.txt']
  }
});
Copy after login

The properties configured in the grunt.initConfig method, in the task module, can use the grunt.config method To access, for example:

grunt.config("proj.name");
Copy after login

In addition, the grunt task module will automatically extract the attributes corresponding to the task name in the configuration object based on the task name. For example, if you define the task hello, then in the attribute "hello" corresponding to the configuration object Configure the configuration and data needed in the task execution function.

5. Loading grunt plug-in tasks

In order to reduce duplication of work, we can load existing plug-in tasks.

1. Load your own private grunt plug-in

You can place some of your own defined task scripts in the same directory and load them from the specified directory through the grunt.loadTasks method All grunt task scripts in this directory.

2. Load the grunt plug-in published in npm

Common tasks like grunt-contrib-copy and grunt-contrib-uglify have been implemented as grunt plug-ins The form has been developed and published in the npm public library. As long as the plug-ins to be used are listed in the dependency in the package.json file and installed through npm install, the task can be loaded directly.

// 加载能够提供"copy"任务的插件。
grunt.loadNpmTasks('grunt-contrib-copy');
Copy after login

3. Directly load all plug-ins starting with "grunt-"

There is a load-grunt-tasks plug-in on npm that can be used to load all plug-ins in the dependency list Plug-ins starting with "grunt-".
List the plug-ins that need to be used starting with "grunt-" in the dependency, and then call them in Gruntfile.js.

//Load grunt tasks from NPM packages
load-grunt-tasks
Copy after login

6. Custom tasks

1. Directly define the behavior of the task

grunt.registerTask('hello', 'Show some msg', function() {
  console.log(this.options().name); //输出hello
});
Copy after login

2.Definition For the task list

a task can be defined as a combination of a series of tasks, which will be executed in sequence.

grunt.registerTask('dothings', 'copy and Show some msg', ['copy','hello']);
Copy after login

3. Define the default task

By defining the default task, you can let Grunt execute one or more tasks by default. If you do not specify a task when executing the grunt command, the default task will be executed. If defined below, executing grunt is equivalent to executing grunt hello.

grunt.registerTask('default', ['hello']);
Copy after login

4. Define compound tasks

registerMultiTask method can define a compound task. The compound task will set the corresponding attributes configured in the grunt.initConfig method except options. The defined attributes are processed as target:data pairs in turn.

module.exports = function(grunt) {
    grunt.initConfig({
        Log: {
            options: {
                sep: ';'
            },
            srcs: ['1.txt', '2.txt'],
            dests: ['d1.txt', 'd2.txt']
        }
    });
    grunt.registerMultiTask("Log", function() {
        var options = this.options({ sep: '&' });
        console.log(this.target); 
        console.log(this.data.join(options.sep));
    });
};
Copy after login

Executing grunt Log will output:

Running "Log:srcs" (Log) task
srcs
1.txt;2.txt
Running "Log:dests" (Log) task
dests
d1.txt;d2.txt

定义任务行为Tips

1.任务内部可以执行其他的任务。

grunt.registerTask('mytask', function() {
  grunt.task.run('task1', 'task2');
  // Or:
  grunt.task.run(['task1', 'task2']);
});
Copy after login

2.定义异步任务

grunt.registerTask('mytask', function() {
  var done = this.async();
  //do something
  done();
});
Copy after login

3.当任务失败时,所有后续任务都将终止

在任务中,当执行失败,可以return false来表明当前任务执行失败,一般,多个任务按顺序执行,如果有任务失败时,所有后续任务都将终止。可以通过在命令行后加上--force来使有任务失败时,后续任务能继续进行。

4.任务中检查前置任务状态

有些任务可以依赖于其他任务的成功执行。通过grunt.task.requires方法来检查其前置任务是否已经执行,并且没有失败。

5.任务中检查配置属性

可以用方法grunt.task.requiresConfig指定一个或者多个字符串或者数组的配置属性为必需的。如果一个或多个必需的配置属性缺失,就通知系统当前任务失败。

本文来自 js教程 栏目,欢迎学习!  

The above is the detailed content of js modular development—Gruntfile.js detailed explanation. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to Optimize the Maintainability of Java Code: Experience and Advice How to Optimize the Maintainability of Java Code: Experience and Advice Nov 22, 2023 pm 05:18 PM

How to Optimize the Maintainability of Java Code: Experience and Advice In the software development process, writing code with good maintainability is crucial. Maintainability means that code can be easily understood, modified, and extended without causing unexpected problems or additional effort. For Java developers, how to optimize the maintainability of code is an important issue. This article will share some experiences and suggestions to help Java developers improve the maintainability of their code. Following standardized naming rules can make the code more readable.

How to solve the code complexity error in Python code? How to solve the code complexity error in Python code? Jun 24, 2023 pm 05:43 PM

Python is a simple, easy-to-learn and efficient programming language, but when we write Python code, we may encounter some problems with excessive code complexity. If these problems are not solved, it will make the code difficult to maintain, error-prone, and reduce the readability and scalability of the code. So, in this article, we will discuss how to resolve code complexity error in Python code. Understanding Code Complexity Code complexity is a measure of the nature of code that is difficult to understand and maintain. In Python, there are some indicators that can be used

How to solve the poor maintainability error of Python code? How to solve the poor maintainability error of Python code? Jun 25, 2023 am 11:58 AM

Python, as a high-level programming language, is widely used in software development. Although Python has many advantages, a problem that many Python programmers often face is that the maintainability of the code is poor. The maintainability of Python code includes the legibility, scalability, and reusability of the code. In this article, we will focus on how to solve the problem of poor maintainability of Python code. 1. Code readability Code readability refers to the readability of the code, which is the core of code maintainability.

Guide to implementing modular development in Vue large-scale projects Guide to implementing modular development in Vue large-scale projects Jun 09, 2023 pm 04:07 PM

In modern web development, Vue, as a flexible, easy-to-use and powerful front-end framework, is widely used in the development of various websites and applications. When developing large-scale projects, how to simplify the complexity of the code and make the project easier to maintain is a problem that every developer must face. Modular development can help us better organize code, improve development efficiency and code readability. Below, I will share some experiences and guidelines for implementing modular development in Vue large-scale projects: 1. Clear division of labor in a large-scale project

What is modularity in vue What is modularity in vue Dec 23, 2022 pm 06:06 PM

In Vue, modularization is to encapsulate a single function into a module (file). The modules are isolated from each other, but internal members can be exposed through specific interfaces, and they can also rely on other modules (to facilitate code reuse, thus Improve development efficiency and facilitate later maintenance). The benefits of modular development: 1. Clear organization and easy maintenance; 2. All data will not be requested back at once, and the user experience is good; 3. Modules are isolated from each other, but internal members can be exposed through specific interfaces, or Depends on other modules.

How to use Go language for code modularization practice How to use Go language for code modularization practice Aug 03, 2023 am 10:31 AM

How to use Go language for code modularization practice Introduction: In software development, code modularization is a common development methodology. By dividing the code into reusable modules, the maintainability, testability and testability of the code can be improved. Reusability. This article will introduce how to use Go language to practice code modularization and provide corresponding code examples. 1. The advantages of modularization improve code maintainability: Modularization divides the code into independent functional modules, each module is responsible for specific tasks, making the code clearer and easier to modify. The code can be improved

Summary of Python development experience: practices to improve code maintainability and scalability Summary of Python development experience: practices to improve code maintainability and scalability Nov 22, 2023 pm 12:22 PM

Summary of Python development experience: Practices to improve code maintainability and scalability. In the software development process, we often encounter demand changes, function iterations, etc., so the maintainability and scalability of the code have become an important part of the development process. Issues that must be taken seriously. Especially in Python development, how to improve the maintainability and scalability of code has become a common concern among developers. This article will summarize some practices to improve the maintainability and scalability of Python code, hoping to bring some benefits to Python developers.

Chaon launches TGS-1000 series industrial mini hosts: supports stacking interface expansion modules and is equipped with MTL processors Chaon launches TGS-1000 series industrial mini hosts: supports stacking interface expansion modules and is equipped with MTL processors Aug 14, 2024 pm 01:33 PM

According to news from this website on August 14, Chaoen Vecow launched the TGS-1000 series industrial mini host equipped with the first generation Intel Core Ultra processor on July 22, Beijing time. The special feature of this series of products is that it supports vertical stacking to expand additional I/O ports. The TGS-1000 series is divided into two models: TGS-1000 and TGS-1500. The difference is that the bottom of the TGS-1500 contains a module that supports MXM graphics cards. It can choose Intel Ruixuan A370M or up to RTX5000Ada mobile version of Nvidia professional cards. ▲TGS-1500TGS-1000 series mini hosts are available with Intel Core Ultra7165H or Ultra5135H processors, equipped with dual D

See all articles