初学grunt

本文深入探讨Grunt自动化构建工具的功能与应用,包括文件最小化、整合、依赖管理及自定义任务设置。通过示例讲解如何利用Grunt进行项目配置,实现文件压缩、模板字符串解析等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

check the official docs first


grunt到底可以做些什么?

  • 最小化文件 uglify
  • 文件整合 concat

install node.js && npm

install git(optional),

install vscode editor, in terminal select default shell ( from cmd to git bash )

for example, use following command to copy the repository to your pc:

git clone https://github.com/cowboy/jquery-tiny-pubsub

cd to the folder “jquery-tiny-pub”

use command npm install to install all dependencies


Gruntfile组成,一般用Gruntfile.js。

组成为:

  1. wrapper function 包装器函数:

module.exports = function(grunt) {}

这个算是入口,当在terminal中输入grunt时,node知道加载这个文件。

  1. Project and task configuration 项目和任务配置

    如: pkg: grunt.file.readJSON('package.json'), uglify: {}

    文档中写到:

    In this example, grunt.file.readJSON('package.json') imports the JSON metadata stored in package.json into the grunt config.

    我的理解:

    pkg的全称是package。 grunt这个对象,后面跟一个file属性,然后一个readJSON方法,应该都是grunt自定义的, 可能只有查看源文件才能明白作者是怎么设计的。看名字readJSON就知道是读json文件去了。

    那么读文件的目的是什么?读什么内容呢?

    文档中写到:

    Because <% %> template strings may reference any config properties, configuration data like filepaths and file lists may be specified this way to reduce repetition.
    

    这个模板语法可能引用任何配置属性,为了减少重复,配置数据如文件路径和文件列表可能用这种方式来指定

    You may store any arbitrary data inside of the configuration object, and as long as it doesn't conflict with properties your tasks require, it will be otherwise ignored. 
    
    Also, because this is JavaScript, you're not limited to JSON;
    
    you may use any valid JS here. 
    
    You can even programmatically generate the configuration if necessary.
    

    内容等会再看,先看后面的

    示例如下:

    // Project configuration.
    grunt.initConfig({
      pkg: grunt.file.readJSON('package.json'),
      uglify: {
        options: {
          banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
        },
        build: {
          src: 'src/<%= pkg.name %>.js',
          dest: 'build/<%= pkg.name %>.min.js'
        }
      }
    });
    

    这里提到了模版字符串<% %>,一开始听着名字还以为是js中的模板字符串呢,这看不起不像,为什么呢,可能因为*``*是es6的语法吧,Template literals。至于这个模版字符串怎么定义的,估计只能查看源码了。然后查看api吧,grunt.template

    <%= pkg.name %>应该指的是,去package.json里面去找name这个key。即{“name”: ??},如我自定义的这个name是gruntproject, 然后我在根目录新建一个文件夹src,在里面在建一个文件gruntproject.js。这个src: 'src/<%= pkg.name %>.js'就是原文件的位置。然后dest: 'build/<%= pkg.name %>.min.js'就是目标文件的位置和文件名。当我在terminal中输入grunt uglify,就会输出下面的Logs

     Running "uglify:build" (uglify) task
     
     > > 1 file created 30 B → 63 B
     
     Done.
    

    再看根目录,就会发现有个文件夹build自动生成了,里面有一个文件gruntproject.min.js。打开这个文件,代码如下:

        /*! gruntproject 2019-08-02 */
    
        +gruntproject.js里面的代码
    

    所以这个{options: {banner: ??}}的意思,banner是横幅的意思,然后会在新文件的第一行开始写入,然后基本格式是一个字符串,如“某个字符串\n”\n是换行的意思。可以看出模版字符串里面的代码是会先解析的,解析完后再合并到字符串里面。

  2. Loading Grunt plugin and tasks 加载grunt插件和任务

    是不是说需要grunt插件来处理特定的任务,及uglify任务就必须要grunt-contrib-uglify插件来处理。这时候pkg应该排上用处了

  3. Custom tasks 自定义任务

    首要要设置一个默认的任务,即告诉grunt,如果我没有指定要做哪个任务,那么就做这个default任务

    实例代码块:

    // Default task(s).
    grunt.registerTask('default', ['uglify']);
    

    文档中写到:

    You can configure Grunt to run one or more tasks by default by defining a default task. In the following example, running grunt at the command line without specifying a task will run the uglify task. This is functionally the same as explicitly running grunt uglify or even grunt default. Any number of tasks (with or without arguments) may be specified in the array.

    即在这个实例中,我可以用grunt defaultgrunt uglify来执行default任务uglify。

    如果我想添加更多的任务,那么就直接在这个数组里面加就可以了

    文档中写到:

    If your project requires tasks not provided by a Grunt plugin, you may define custom tasks right inside the Gruntfile. For example, this Gruntfile defines a completely custom default task that doesn't even utilize task configuration:
    

    如果某些情况,没有相应的插件可以处理,那么就可以直接在这个文件里定义。

    如下面这个列子就完全没有使用第二步中的任务配置

    module.exports = function(grunt) {
    
      // A very basic default task.
      grunt.registerTask('default', 'Log some stuff.', function() {
        grunt.log.write('Logging some stuff...').ok();
      });
    
    };
    

    通过查文档api中的grunt.taskgrunt.registerTaskgrunt.task.registerTask的缩写, 然后这里用到了3个参数,用的是这个grunt.task.registerTask(taskName, description, taskList)。然后grunt.log的api中的一个用法grunt.log.write(msg), 看是要看api怎么写的,比如grunt.log.write和grunt.log.writeln的区别。

minify files:

最小化文件,比如jquery文件的开发版和最小化版

uglify task, grunt-contrib-uglify plugin

任务名叫做uglify,要用npm install grunt-contrib-uglify --save-dev安装插件到devDependencies

JFM7VX690T型SRAM型现场可编程门阵列技术手册主要介绍的是上海复旦微电子集团股份有限公司(简称复旦微电子)生产的高性能FPGA产品JFM7VX690T。该产品属于JFM7系列,具有现场可编程特性,集成了功能强大且可以灵活配置组合的可编程资源,适用于实现多种功能,如输入输出接口、通用数字逻辑、存储器、数字信号处理和时钟管理等。JFM7VX690T型FPGA适用于复杂、高速的数字逻辑电路,广泛应用于通讯、信息处理、工业控制、数据中心、仪表测量、医疗仪器、人工智能、自动驾驶等领域。 产品特点包括: 1. 可配置逻辑资源(CLB),使用LUT6结构。 2. 包含CLB模块,可用于实现常规数字逻辑和分布式RAM。 3. 含有I/O、BlockRAM、DSP、MMCM、GTH等可编程模块。 4. 提供不同的封装规格和工作温度范围的产品,便于满足不同的使用环境。 JFM7VX690T产品系列中,有多种型号可供选择。例如: - JFM7VX690T80采用FCBGA1927封装,尺寸为45x45mm,使用锡银焊球,工作温度范围为-40°C到+100°C。 - JFM7VX690T80-AS同样采用FCBGA1927封装,但工作温度范围更广,为-55°C到+125°C,同样使用锡银焊球。 - JFM7VX690T80-N采用FCBGA1927封装和铅锡焊球,工作温度范围与JFM7VX690T80-AS相同。 - JFM7VX690T36的封装规格为FCBGA1761,尺寸为42.5x42.5mm,使用锡银焊球,工作温度范围为-40°C到+100°C。 - JFM7VX690T36-AS使用锡银焊球,工作温度范围为-55°C到+125°C。 - JFM7VX690T36-N使用铅锡焊球,工作温度范围与JFM7VX690T36-AS相同。 技术手册中还包含了一系列详细的技术参数,包括极限参数、推荐工作条件、电特性参数、ESD等级、MSL等级、重量等。在产品参数章节中,还特别强调了封装类型,包括外形图和尺寸、引出端定义等。引出端定义是指对FPGA芯片上的各个引脚的功能和接线规则进行说明,这对于FPGA的正确应用和电路设计至关重要。 应用指南章节涉及了FPGA在不同应用场景下的推荐使用方法。其中差异说明部分可能涉及产品之间的性能差异;关键性能对比可能包括功耗与速度对比、上电浪涌电流测试情况说明、GTH Channel Loss性能差异说明、GTH电源性能差异说明等。此外,手册可能还提供了其他推荐应用方案,例如不使用的BANK接法推荐、CCLK信号PCB布线推荐、JTAG级联PCB布线推荐、系统工作的复位方案推荐等,这些内容对于提高系统性能和稳定性有着重要作用。 焊接及注意事项章节则针对产品的焊接过程提供了指导,强调焊接过程中的注意事项,以确保产品在组装过程中的稳定性和可靠性。手册还明确指出,未经复旦微电子的许可,不得翻印或者复制全部或部分本资料的内容,且不承担采购方选择与使用本文描述的产品和服务的责任。 上海复旦微电子集团股份有限公司拥有相关的商标和知识产权。该公司在中国发布的技术手册,版权为上海复旦微电子集团股份有限公司所有,未经许可不得进行复制或传播。 技术手册提供了上海复旦微电子集团股份有限公司销售及服务网点的信息,方便用户在需要时能够联系到相应的服务机构,获取最新信息和必要的支持。同时,用户可以访问复旦微电子的官方网站(***以获取更多产品信息和公司动态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值