# 自动化构建插件
可以在 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' } });
2
# json-templater/object
json 对象中遍历字符串插值替换
json-templater/object
函数接收三个参数:
- 第一个参数为需要处理的字符串
- 第二个参数为一个对象,对象的 key 为字符串插值中的占位字符,value 为要替换占位key的值。
- 第三个参数为处理函数,默认会传入
json-templater/string
函数去处理。
# 使用默认的处理函数
template.json:
{
"magic_key_{{magic}}": {
"key": "interpolation is nice {{value}}"
}
}
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);
}
);
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'
}
}
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}}"
}
}
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
*/
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
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'
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
语法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.')
})
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 链式方法调用
# .write(chunk, [encoding], [callbak])
chunk (string)
encoding (string): like the encoding settings in writeable stream.
http://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback (opens new window)
callback (function): callback function settings in writeable
http://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback (opens new window)
# .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)
← 发布 npm 包