# 自动化构建插件

可以在 js 字符串 和 JSON 对象字符串上执行双花括号插值替换。

# json-templater 字符串插值替换

# json-templater/string 字符串插值替换

json-templater/string 函数接收两个参数:

  • 第一个参数为需要处理的字符串
  • 第二个参数为一个对象,对象的 key 为字符串插值中的占位字符,value 为要替换占位key的值。
var render = require('json-templater/string');
render('{{xfoo}} {{say.what}}', { xfoo: 'yep', say: { what: 'yep' } });
1
2

# json-templater/object json 对象中遍历字符串插值替换

json-templater/object 函数接收三个参数:

  • 第一个参数为需要处理的字符串
  • 第二个参数为一个对象,对象的 key 为字符串插值中的占位字符,value 为要替换占位key的值。
  • 第三个参数为处理函数,默认会传入 json-templater/string 函数去处理。

# 使用默认的处理函数

template.json:

{
  "magic_key_{{magic}}": {
    "key": "interpolation is nice {{value}}"
  }
}
1
2
3
4
5

使用:

const object = require('json-templater/object');

object(
  require('./template.json'),
  { magic: 'key', value: 'value' }
);

// 省略了第三个参数,其实相当于执行的是:
object(
  require('./template.json'),
  { magic: 'key', value: 'value' },
  function (value, data, key) {
    return string(value, data);
  }
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

输出结果:

// 输出结果是一个 js 对象 [object Object]
{
  magic_key_key: {
    key: 'interpolation is nice value'
  }
}
1
2
3
4
5
6

# 自定义渲染函数

json-templater/object 函数可以传入第三个参数作为处理函数。在 json 中每遇到一个字符串就会调用一次这个函数,无论字符串中有没有包含插值符号({{}})。

这个处理函数会接收三个值:

  • 第一个值为 json 中本次遇到字符串(value)
  • 第二个值就是 json-templater/object 接收的第二个参数这个对象,每一次都会完整传入这个对象。
  • 第三个值表示当前待处理字符串(value)对应的 键(key),如果没有键(比如当前待处理字符串就已经是键的情况)则是 null

使用这个自定义函数,可以实现一些复杂的逻辑,比如根据判断返回不同的值等。

{
  "magic_key_{{magic}}": {
    "key": "interpolation is nice {{value}}"
  }
}
1
2
3
4
5
const object = require('json-templater/object');

object(
  require('./template.json'),
  { magic: 'key', value: 'value' },
  function (value, data, key) {
    console.log('------------')
    console.log(value)
    console.log(data)
    console.log(key)
    return value;
  }
);

// 打印结果
/*

------------
magic_key_{{magic}}
{ magic: 'key', value: 'value' }
null
------------
key
{ magic: 'key', value: 'value' }
null
------------
interpolation is nice {{value}}
{ magic: 'key', value: 'value' }
key

*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# uppercamelcase

将用破折号/点/下划线/空格分隔的字符串转换成大写形式

npm install --save uppercamelcase
1
const upperCamelCase = require('uppercamelcase');

upperCamelCase('foo-bar');
//=> FooBar

upperCamelCase('foo_bar');
//=> FooBar

upperCamelCase('Foo-Bar');
//=> FooBar

upperCamelCase('--foo.bar');
//=> FooBar

upperCamelCase('__foo__bar__');
//=> FooBar

upperCamelCase('foo bar');
//=> FooBar

console.log(process.argv[3]);
//=> --foo-bar
upperCamelCase(process.argv[3]);
//=> FooBar

upperCamelCase('foo', 'bar');
//=> 'FooBar'

upperCamelCase('__foo__', '--bar');
//=> 'FooBar'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# file-save 文件读取并写入

通过 Node 的 Stream 流接口,对文件流入(streaming)数据并保存。(如果路径不存在,将自动创建路径及文件)。

npm install file-save
1

语法fileSave('文件路径')

file-save 模块将自动对文件产生写入流。不存在的则会自动创建。

var fileSave = require('file-save');

// the first line will create a writeStream to the file path
fileSave('./src/test.txt')
    .write('this is the first line\n', 'utf8')
    .write('this is the second line\n', 'utf8', function() {
        console.log('writer callback')
    })
    .end('this is the end')
    .error(function() {
        console.log('error goes here')
    })
    .finish(function() {
        console.log('write finished.')
    })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 链式方法调用

# .write(chunk, [encoding], [callbak])

# .end([string], [encoding], [callback])

.write 方法一样,但第一个参数也变成了可选的。

# .error(callback)

可以传入一个回调函数供 stream 发生错误时调用。

see more: http://nodejs.org/api/stream.html#stream_event_error_1 (opens new window)

# .finish(callback)

传入一个完成时的回调, using this method you have to call .foot before calling this method

see more: http://nodejs.org/api/stream.html#stream_event_finish (opens new window)