Rumah hujung hadapan web tutorial js js模块化开发—Gruntfile.js详解

js模块化开发—Gruntfile.js详解

Nov 28, 2019 pm 03:38 PM
Modular

js模块化开发—Gruntfile.js详解

一、grunt模块简介

grunt插件,是一种npm环境下的自动化工具。对于需要反复重复的任务,例如压缩、编译、单元测试、linting等,自动化工具可以减轻你的劳动,简化你的工作。grunt模块根据Gruntfile.js文件中的配置进行任务。
如果在package.json中定义如下命令:

【相关课程推荐:JavaScript视频教程】  

"scripts": {
    "build": "npm install && grunt"
}
Salin selepas log masuk

因为运行npm run build会先安装devDependencies中定义的一些模块,则运行npm run build这个命令相当于做如下操作:

● npm install grunt-cli -g

● npm install

● grunt

二、gruntfile.js的结构:

● "wrapper" 函数

● 项目和任务配置

● 加载 grunt 插件和任务

● 自定义任务

三、"wrapper" 函数

每一份 Gruntfile.js(和grunt插件)都遵循同样的格式,你所书写的Grunt代码必须放在此函数内:

module.exports = function(grunt){
         //do grunt-related things in here
}
Salin selepas log masuk

四、项目和任务配置

大部分的Grunt任务都依赖某些配置数据,我们通过grunt.initConfig 方法来配置Grunt任务的参数。
grunt.initConfig 方法的参数是一个JSON对象,你可以在这个配置对象中存储任意的数据。此外,由于这本身就是JavaScript,你还可以在这里使用任意的有效的JS代码。甚至你可以用<% %>模板字符串来引用已经配置过的属性,例如:

// 项目和任务配置
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']
  }
});
Salin selepas log masuk

在grunt.initConfig 方法中配置的属性,在任务模块中,可用grunt.config方法进行访问,例如:

grunt.config("proj.name");
Salin selepas log masuk

另外,grunt任务模块会自动根据任务名来提取配置对象中和任务名对应的属性,比如定义任务hello,则在配置对象对应的属性"hello"中配置任务执行函数中所需用到的配置和数据。

五、加载grunt插件任务

为了减少重复劳动,我们可以加载已有的插件任务。

1.加载自己私有的grunt插件

可将自己定义的一些task脚本放在同一个目录下,通过grunt.loadTasks方法从指定目录加载该目录下所有的grunt任务脚本。

2.加载在npm中发布的grunt插件

像 grunt-contrib-copy和grunt-contrib-uglify这些常用的任务都已经以grunt插件的形式被开发出来了,且被发布在npm公开库中,只要在 package.json 文件中将需要使用的插件列在dependency中,并通过npm install安装之后,就可以直接加载该任务。

// 加载能够提供"copy"任务的插件。
grunt.loadNpmTasks('grunt-contrib-copy');
Salin selepas log masuk

3.直接加载所有以"grunt-"打头的插件

npm上有个load-grunt-tasks插件可以用来加载dependency列表中所有以"grunt-"打头的插件。
将需要使用的"grunt-"打头的插件列在dependency中,然后在Gruntfile.js中进行调用。

//Load grunt tasks from NPM packages
load-grunt-tasks
Salin selepas log masuk

六、自定义任务

1.直接定义任务的行为

grunt.registerTask('hello', 'Show some msg', function() {
  console.log(this.options().name); //输出hello
});
Salin selepas log masuk

2.定义为任务列表

可以将一个任务定义为一系列任务的组合,这一系列任务将按照顺序执行。

grunt.registerTask('dothings', 'copy and Show some msg', ['copy','hello']);
Salin selepas log masuk

3.定义默认任务

通过定义 default 任务,可以让Grunt默认执行一个或多个任务。执行 grunt 命令时如果不指定一个任务的话,将会执行默认任务。如进行下面定义的话执行grunt 相当于执行grunt hello。

grunt.registerTask('default', ['hello']);
Salin selepas log masuk

4.定义复合任务

registerMultiTask方法可以定义一个复合任务,复合任务将会对grunt.initConfig 方法中配置的相应属性中除了options外定义的属性依次作为target:data对进行处理。

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));
    });
};
Salin selepas log masuk

执行grunt Log将会输出:

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']);
});
Salin selepas log masuk

2.定义异步任务

grunt.registerTask('mytask', function() {
  var done = this.async();
  //do something
  done();
});
Salin selepas log masuk

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

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

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

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

5.任务中检查配置属性

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

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

Atas ialah kandungan terperinci js模块化开发—Gruntfile.js详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Mengoptimumkan Kebolehselenggaraan Kod Java: Pengalaman dan Nasihat Cara Mengoptimumkan Kebolehselenggaraan Kod Java: Pengalaman dan Nasihat Nov 22, 2023 pm 05:18 PM

Cara Mengoptimumkan Kebolehselenggaraan Kod Java: Pengalaman dan Nasihat Dalam proses pembangunan perisian, menulis kod dengan kebolehselenggaraan yang baik adalah penting. Kebolehselenggaraan bermakna kod boleh difahami dengan mudah, diubah suai dan dilanjutkan tanpa menyebabkan masalah yang tidak dijangka atau usaha tambahan. Bagi pembangun Java, cara mengoptimumkan kebolehselenggaraan kod adalah isu penting. Artikel ini akan berkongsi beberapa pengalaman dan cadangan untuk membantu pembangun Java meningkatkan kebolehselenggaraan kod mereka. Mengikuti peraturan penamaan piawai boleh menjadikan kod lebih mudah dibaca.

Bagaimana untuk menyelesaikan ralat kerumitan kod dalam kod Python? Bagaimana untuk menyelesaikan ralat kerumitan kod dalam kod Python? Jun 24, 2023 pm 05:43 PM

Python ialah bahasa pengaturcaraan yang mudah, mudah dipelajari dan cekap, tetapi apabila kita menulis kod Python, kita mungkin menghadapi beberapa masalah dengan kerumitan kod yang berlebihan. Jika masalah ini tidak diselesaikan, ia akan menjadikan kod sukar untuk diselenggara, terdedah kepada ralat, dan mengurangkan kebolehbacaan dan kebolehskalaan kod. Jadi, dalam artikel ini, kita akan membincangkan cara menyelesaikan ralat kerumitan kod dalam kod Python. Memahami Kerumitan Kod Kerumitan kod ialah ukuran sifat kod yang sukar difahami dan dikekalkan. Dalam Python, terdapat beberapa penunjuk yang boleh digunakan

Bagaimana untuk menyelesaikan ralat kebolehselenggaraan yang lemah bagi kod Python? Bagaimana untuk menyelesaikan ralat kebolehselenggaraan yang lemah bagi kod Python? Jun 25, 2023 am 11:58 AM

Python, sebagai bahasa pengaturcaraan peringkat tinggi, digunakan secara meluas dalam pembangunan perisian. Walaupun Python mempunyai banyak kelebihan, masalah yang sering dihadapi oleh ramai pengaturcara Python ialah kod tersebut kurang boleh diselenggara. Kebolehselenggaraan kod Python termasuk kebolehbacaan, kebolehskalaan dan kebolehgunaan semula kod tersebut. Dalam artikel ini, kami akan memberi tumpuan kepada cara menyelesaikan masalah kebolehselenggaraan kod Python yang lemah. 1. Kebolehbacaan kod Kebolehbacaan kod merujuk kepada kebolehbacaan kod, yang merupakan teras kebolehselenggaraan kod.

Panduan untuk melaksanakan pembangunan modular dalam projek berskala besar Vue Panduan untuk melaksanakan pembangunan modular dalam projek berskala besar Vue Jun 09, 2023 pm 04:07 PM

Dalam pembangunan web moden, Vue, sebagai rangka kerja hadapan yang fleksibel, mudah digunakan dan berkuasa, digunakan secara meluas dalam pembangunan pelbagai tapak web dan aplikasi. Apabila membangunkan projek berskala besar, bagaimana untuk memudahkan kerumitan kod dan menjadikan projek lebih mudah untuk diselenggara adalah masalah yang mesti dihadapi oleh setiap pemaju. Pembangunan modular boleh membantu kami menyusun kod dengan lebih baik, meningkatkan kecekapan pembangunan dan kebolehbacaan kod. Di bawah, saya akan berkongsi beberapa pengalaman dan garis panduan untuk melaksanakan pembangunan modular dalam projek berskala besar Vue: 1. Pembahagian kerja yang jelas dalam projek berskala besar

Apakah modulariti dalam vue Apakah modulariti dalam vue Dec 23, 2022 pm 06:06 PM

Dalam Vue, modularisasi adalah untuk merangkum satu fungsi ke dalam modul (fail) Modul diasingkan antara satu sama lain, tetapi mereka boleh mendedahkan ahli dalaman melalui antara muka tertentu atau bergantung pada modul lain (untuk memudahkan penggunaan semula kod, dengan itu Meningkatkan kecekapan pembangunan dan). memudahkan penyelenggaraan kemudian). Faedah pembangunan modular: 1. Organisasi yang jelas dan penyelenggaraan yang mudah 2. Semua data tidak akan diminta kembali sekaligus, dan pengalaman pengguna adalah baik 3. Modul diasingkan antara satu sama lain, tetapi ahli dalaman boleh didedahkan melalui tertentu; antara muka, atau Bergantung pada modul lain.

Cara menggunakan bahasa Go untuk amalan modularisasi kod Cara menggunakan bahasa Go untuk amalan modularisasi kod Aug 03, 2023 am 10:31 AM

Cara menggunakan bahasa Go untuk amalan modularisasi kod Pengenalan: Dalam pembangunan perisian, modularisasi kod ialah metodologi pembangunan biasa Dengan membahagikan kod kepada modul boleh guna semula, kebolehselenggaraan, kebolehujian dan kebolehgunaan kod boleh dipertingkatkan. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk mempraktikkan modularisasi kod dan menyediakan contoh kod yang sepadan. 1. Kelebihan modularisasi meningkatkan kebolehselenggaraan kod: Modularisasi membahagikan kod kepada modul berfungsi bebas, setiap modul bertanggungjawab untuk tugas tertentu, menjadikan kod lebih jelas dan mudah diubah suai. Kod boleh diperbaiki

Ringkasan pengalaman pembangunan Python: amalan untuk meningkatkan kebolehselenggaraan dan kebolehskalaan kod Ringkasan pengalaman pembangunan Python: amalan untuk meningkatkan kebolehselenggaraan dan kebolehskalaan kod Nov 22, 2023 pm 12:22 PM

Ringkasan pengalaman pembangunan Python: Amalan untuk meningkatkan kebolehselenggaraan dan kebolehskalaan kod Dalam proses pembangunan perisian, kita sering menghadapi perubahan permintaan, lelaran fungsi, dsb., jadi kebolehselenggaraan dan kebolehskalaan kod telah menjadi bahagian penting dalam proses pembangunan. Isu yang mesti diambil serius. Terutamanya dalam pembangunan Python, cara meningkatkan kebolehselenggaraan dan kebolehskalaan kod telah menjadi kebimbangan umum di kalangan pembangun. Artikel ini akan meringkaskan beberapa amalan untuk meningkatkan kebolehselenggaraan dan skalabiliti kod Python, dengan harapan dapat membawa beberapa faedah kepada pembangun Python.

Chaon melancarkan hos mini industri siri TGS-1000: menyokong modul pengembangan antara muka susun dan dilengkapi dengan pemproses MTL Chaon melancarkan hos mini industri siri TGS-1000: menyokong modul pengembangan antara muka susun dan dilengkapi dengan pemproses MTL Aug 14, 2024 pm 01:33 PM

Menurut berita dari laman web ini pada 14 Ogos, Chaoen Vecow melancarkan hos mini industri siri TGS-1000 yang dilengkapi dengan pemproses Intel Core Ultra generasi pertama pada 22 Julai, waktu Beijing. Ciri istimewa siri produk ini ialah ia menyokong tindanan menegak untuk mengembangkan port I/O tambahan. Siri TGS-1000 dibahagikan kepada dua model: TGS-1000 dan TGS-1500 Perbezaannya ialah bahagian bawah TGS-1500 mengandungi modul yang menyokong kad grafik MXM Ia boleh memilih Intel Ruixuan A370M atau sehingga versi mudah alih RTX5000Ada kad profesional NVIDIA. ▲Hos mini siri TGS-1500TGS-1000 tersedia dengan pemproses Intel Core Ultra7165H atau Ultra5135H, dilengkapi dengan dwi D

See all articles