/grunt-seajs-converter

first step of compress seajs module

Primary LanguageJavaScriptMIT LicenseMIT

grunt-seajs-converter

convert seajs module to cmd

Getting Started

This plugin requires Grunt ~0.4.5

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-seajs-converter --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-seajs-converter');

The "seajs_converter" task

Overview

In your project's Gruntfile, add a section named seajs_converter to the data object passed into grunt.initConfig().

grunt.initConfig({
  seajs_converter: {
    options: {
      // Task-specific options go here.
      base:""//for generate id
      converters : {
                  ".js" : [script.jsConverter],
                  '.html': [text.htmlConverter],
                  '.json': [json.jsonConverter],
                  '.tpl': [text.htmlConverter],
                  '.handlebars': [template.handlerbarsConverter]
              },
              handlebars : {
                  id : ""  //alias for handlebars runtime lib
                  //other compile options
              },
              uglifyjs : {
                  indent_start  : 0,     // start indentation on every line (only when `beautify`)
                  indent_level  : 4,     // indentation level (only when `beautify`)
                  quote_keys    : false, // quote all keys in object literals?
                  space_colon   : true,  // add a space after colon signs?
                  ascii_only    : false, // output ASCII-safe? (encodes Unicode characters as ASCII)
                  inline_script : false, // escape "</script"?
                  width         : 80,    // informative maximum line width (for beautified output)
                  max_line_len  : 32000, // maximum line length (for non-beautified output)
                  ie_proof      : true,  // output IE-safe code?
                  beautify      : true, // beautify output?
                  source_map    : null,  // output a source map
                  bracketize    : false, // use brackets every time?
                  comments      : true, // output comments?
                  semicolons    : true
              },
              modifiers : {
                  id : null,
                  dependency : null,
                  require : null,
                  async : null
              }
    },
    your_target: {
      // Target-specific file lists and/or options go here.
    },
  },
});

Options

options.base

base文件夹路径,所有没定义id的module在生成的id为module文件相对于base文件夹的位置。 例:module的路径为/example/main.js,base为example.则在生成的main module的id为main;

options.converters

编写自定义转换函数。与文件的后缀名对应,每个后缀名可以对应一个数组。 插件已定义的converter有

".js" : [script.jsConverter],
'.html': [text.htmlConverter],
'.json': [json.jsonConverter],
'.tpl': [text.htmlConverter],
'.handlebars': [template.handlerbarsConverter]

converter的格式为

var converter = function(file,options){}

file参数的值为

{
  src:"file src",
  dest:"file dest"
}

options则是grunt任务接收的参数

options.handlebars

与handlebars相关的配置,其中id为handlebars runtime lib的地址,可以是cdn地址也可以是项目中的alias名. 其余配置均与handlebars的precompile的配置相同,可参照 Handlebars.precompile.

options.uglifyjs

与uglifyjs的输出配置相同,用于转换成功后输出结果

options.modifiers

在输出id,deps,require,require.async等地址时可以转换其地址。共三种模式:

 seajs_converter:{
    modifier:{
        id : {
            "targetId" : "idafterchange"
        }
    }
 }
seajs_converter:{
    modifier:{
        id : function(targetId){
              return "idafterchange"
        }
    }
 }

如果是函数,这一定需要返回值,其中,dependency定义为函数时返回null则代表删除该dependency;

seajs_converter:{
  modifier:{
      id :[[/regexpfortesttargetId/,idafterChange]]
  }
}

以上三种模式当用于dependency时,这代表的是dependencies数组中的每一个单独的dependency; 以下是具体示例。

grunt.initConfig({
  seajs_converter:{
          config : {
              options:{
                  base : "example/lib",
                  modifiers:{
                    id:{
                      "config":"config-debug"
                    }
                  }
              },
              src : "example/lib/config.js",
              dest : "tmp/lib/config.js"
          },
          other : {
              options : {
                  base : "example",
                  modifiers:{
                    dependency:[[/^jquery/],"$"]
                  }
              },
              files:[{
                  expand : true,
                  cwd : "example/js",
                  src : "**/*.js",
                  dest : "tmp/js"
              }]
          }
});

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.

Release History

(Nothing yet)