写包称呼大全写包格式(现代流行的)
大家好,我是Echa。
今天继续聊聊NPM, 若Node.js没有NPM,会怎样呢?
小编一句话概括:npm 之于 Node.js ,就像 pip 之于 Python, gem 之于 Ruby, pear 之于 PHP ,JDK 之于 Java , mod 之于 golang。
可见npm 的在Node.js中的位置有多么重要。
昨天小编详细介绍了npm,以及其他现代流行的npm 集合,从1-14 个npm集合,建议看看上篇:现代流行的 npm包大全(上)
接下来,小编直接从全文大纲 15 点开始细聊。继续往下看,惊喜不断,收获满满。
全文大纲
- NPM介绍
- 前端框架npm 集合
- 样式框架npm 集合
- 后端框架npm 集合
- CORS和请求 npm 集合
- API 服务 npm 集合
- Web sockets npm 集合
- 记录器npm集合
- 数据库工具npm集合
- 安全认证工具npm集合
- 配置模块npm集合
- 静态网站生成器npm集合
- 模板语言npm集合
- 图像处理npm集合
- 日期格式npm集合
- 数据生成器npm集合
- 验证者npm集合
- 表格和电子邮件npm集合
- 测试工具npm集合
- 网页抓取和自动化npm集合
- Linters 和格式化程序npm集合
- 模块打包器和最小化器npm集合
- 流程管理器和运行器npm集合
- CLI 和调试器npm集合
- 实用程序npm集合
- 系统模块npm集合
- 其他npm集合
日期格式npm集合
- DayJS
npm 地址:https://www.npmjs.com/package/dayjs
DayJS 是 MomentJS 的快速轻量级替代品(自 2020 年 9 月起处于维护模式)。使用类似的 API - 如果您使用过 MomentJS,那肯定已经知道如何使用大部分 DayJS。
安装
npm i dayjs
案例
dayjs('2018-08-08') // parse
dayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // display
dayjs().set('month', 3).month() // get & set
dayjs().add(1, 'year') // manipulate
dayjs().isBefore(dayjs()) // query
如下图:
- Luxon
npm 地址: https://www.npmjs.com/package/luxon
如果您喜欢另一种轻量级的替代方案,API 略有不同,那么 Luxon 可能是我们的正确选择。
安装
npm i luxon
案例
DateTime.now().setZone("America/New_York").minus({ weeks: 1 }).endOf("day").toISO();
如下图:
数据生成器npm集合
- Shortid
npm 地址: https://www.npmjs.com/package/shortid
它可以创建一个非常短的非顺序的url 唯一id。它非常适合 url 缩短器、DB id 和任何其他 id。
安装
npm i shortid
案例
~/projects/shortid ❯ node examples/examples.js
eWRhpRV
23TplPdS
46Juzcyx
dBvJIh-H
2WEKaVNO
7oet_d9Z
dogPzIz8
nYrnfYEv
a4vhAoFG
hwX6aOr7
如下图:
- Uuid
npm 地址:https://www.npmjs.com/package/uuid
这是一个非常方便的微型包,可快速轻松地生成更复杂的通用唯一标识符 (UUID)。
安装
npm i uuid
案例
import { parse as uuidParse } from 'uuid';
// Parse a UUID
const bytes = uuidParse('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b');
// Convert to hex strings to show byte order (for documentation purposes)
[...bytes].map((v) => v.toString(16).padStart(2, '0')); // ⇨
// [
// '6e', 'c0', 'bd', '7f',
// '11', 'c0', '43', 'da',
// '97', '5e', '2a', '8a',
// 'd9', 'eb', 'ae', '0b'
// ]
如下图:
- Faker
npm 地址: https://www.npmjs.com/package/faker
用于在浏览器和 Node.js 中生成大量虚假数据的有用包。
安装
npm i faker
如下图:
验证者npm集合
- Validator
npm 地址: https://www.npmjs.com/package/validator
这是一个非常方便的字符串验证器库。它有许多有用的方法,可以便于我们快速使用,例如 isEmail()、isCreditCard()、isDate() 和 isURL()。
安装
npm i validator
案例
var validator = require('validator');
validator.isEmail('foo@bar.com'); //=> true
如下图:
- Joi
npm 地址: https://www.npmjs.com/package/joi
它是一个强大的 JavaScript 模式,描述语言和数据验证器。
安装
npm i joi
如下图:
表格和电子邮件npm集合
- Formik
npm 地址: https://www.npmjs.com/package/formik
Formik 是一个流行的 React 和 React Native 开源表单库。它易于使用、声明性和自适应性。
安装
npm i formik
如下图:
- Multer
npm 地址: https://www.npmjs.com/package/multer
Multer 是一个用于处理 multipart/form-data 的 Node.js 中间件,主要用于上传文件。
安装
npm i multer
案例
<form action="/profile" method="post" enctype="multipart/form-data">
<input type="file" name="avatar" />
</form>
const express = require('express')
const multer = require('multer')
const upload = multer({ dest: 'uploads/' })
const app = express()
app.post('/profile', upload.single('avatar'), function (req, res, next) {
// req.file is the `avatar` file
// req.body will hold the text fields, if there were any
})
app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
// req.files is array of `photos` files
// req.body will contain the text fields, if there were any
})
const cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/cool-profile', cpUpload, function (req, res, next) {
// req.files is an object (String -> Array) where fieldname is the key, and the value is array of files
//
// e.g.
// req.files['avatar'][0] -> File
// req.files['gallery'] -> Array
//
// req.body will contain the text fields, if there were any
})
如下图:
- Nodemailer
npm 地址: https://www.npmjs.com/package/nodemailer
Nodemailer 是 Node.js 应用程序的一个模块,可以轻松发送电子邮件。该项目早在 2010 年就开始了,今天它是大多数 Node.js 用户默认使用的解决方案。
安装
npm i nodemailer
案例
let configOptions = {
host: "smtp.example.com",
port: 587,
tls: {
rejectUnauthorized: true,
minVersion: "TLSv1.2"
}
}
如下图:
测试工具npm集合
- Jest
npm 地址: https://www.npmjs.com/package/jest
Jest 是一个令人愉快的 JavaScript 测试框架,专注于简单性。它允许我们使用平易近人、熟悉且功能丰富的 API 编写测试,从而快速为我们提供结果。
安装
npm i jest
如下图:
- Mocha
npm 地址: https://www.npmjs.com/package/mocha
Mocha 是一个 JavaScript 测试框架,让异步测试变得简单有趣。Mocha 测试连续运行,允许灵活准确的报告,同时,将未捕获的异常映射到正确的测试用例。
安装
npm i mocha
如下图:
网页抓取和自动化npm集合
- Cheerio
npm 地址: https://www.npmjs.com/package/cheerio
Cheerio 广泛用于网络抓取工作,有时还用于自动化任务。它基于 jquery 非常快速和快速。Cheerio 封装了 Parse5 解析器,能够解析任何类型的 HTML 和 XML 文档。
安装
npm i cheerio
案例
const cheerio = require('cheerio');
const $ = cheerio.load('<h2 class="title">Hello world</h2>');
$('h2.title').text('Hello there!');
$('h2').addClass('welcome');
$.html();
//=> <html><head></head><body><h2 class="title welcome">Hello there!</h2></body></html>
如下图:
- Puppeteer
npm 地址: https://www.npmjs.com/package/puppeteer
Cheerio 广泛用于网络抓取工作,有时还用于自动化任务。它基于 jquery 非常快速和快速。Cheerio 封装了 Parse5 解析器,能够解析任何类型的 HTML 和 XML 文档。
安装
npm i puppeteer
案例
import puppeteer from 'puppeteer';
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://developer.chrome.com/');
// Set screen size
await page.setViewport({width: 1080, height: 1024});
// Type into search box
await page.type('.search-box__input', 'automate beyond recorder');
// Wait and click on first result
const searchResultSelector = '.search-box__link';
await page.waitForSelector(searchResultSelector);
await page.click(searchResultSelector);
// Locate the full title with a unique string
const textSelector = await page.waitForSelector(
'text/Customize and automate'
);
const fullTitle = await textSelector.evaluate(el => el.textContent);
// Print the full title
console.log('The title of this blog post is "%s".', fullTitle);
await browser.close();
})();
如下图:
Linters 和格式化程序npm集合
- ESLint
npm 地址: https://www.npmjs.com/package/eslint
ESLint 是一种用于识别和报告在 ECMAScript/JavaScript 代码中发现的模式的工具。ESLint 是完全可插拔的,每一条规则都是一个插件,我们可以在运行时添加更多。
安装
npm i eslint
案例
{
"rules": {
"semi": ["error", "always"],
"quotes": ["error", "double"]
}
}
如下图:
- Prettier
npm 地址: https://www.npmjs.com/package/prettier
Prettier 是一个固执己见的代码格式化程序。它通过解析您的代码并使用自己的规则重新打印它来执行一致的样式,这些规则考虑了最大行长度,并在必要时包装代码。
安装
npm i prettier
案例
foo(
reallyLongArg(),
omgSoManyParameters(),
IShouldRefactorThis(),
isThereSeriouslyAnotherOne()
);
如下图:
模块打包器和最小化器npm集合
- Webpack
npm 地址: https://www.npmjs.com/package/webpack
著名且功能强大的模块捆绑器。它的主要目的是捆绑 JavaScript 文件以在浏览器中使用,但它也能够转换、捆绑或打包几乎任何资源或资产。
安装
npm i webpack
如下图:
- HTML-Minifier
npm 地址: https://www.npmjs.com/package/html-minifier
著名且功能强大的模块捆绑器。它的主要目的是捆绑 JavaScript 文件以在浏览器中使用,但它也能够转换、捆绑或打包几乎任何资源或资产。
安装
npm i html-minifier
案例
var minify = require('html-minifier').minify;
var result = minify('<p title="blah" id="moo">foo</p>', {
removeAttributeQuotes: true
});
result; // '<p title=blah id=moo>foo</p>'
如下图:
- Clean-CSS
npm 地址: https://www.npmjs.com/package/clean-css
适用于 Node.js 平台和任何现代浏览器的快速高效的 CSS 优化器。高度可配置和许多兼容模式。
安装
npm i clean-css
案例
var CleanCSS = require('clean-css');
var input = 'a{font-weight:bold;}';
var options = { /* options */ };
var output = new CleanCSS(options).minify(input);
如下图:
- UglifyJS2
npm 地址: https://www.npmjs.com/package/uglify-js
JavaScript 解析器、压缩器、压缩器和美化工具包。它可以接受多个输入文件并支持许多配置选项。
安装
npm i uglify-js
案例
// example.js
var x = {
baz_: 0,
foo_: 1,
calc: function() {
return this.foo_ + this.baz_;
}
};
x.bar_ = 2;
x["baz_"] = 3;
console.log(x.calc());
如下图:
流程管理器和运行器npm集合
- Nodemon
npm 地址: https://www.npmjs.com/package/nodemon
用于开发 Node.js 应用程序的简单监控脚本。对开发很有用,因为它非常容易重新启动,并且默认启用和烘焙文件监视。
安装
npm i nodemon
案例
if (cluster.isMaster) {
process.on("SIGHUP", function () {
for (const worker of Object.values(cluster.workers)) {
worker.process.kill("SIGTERM");
}
});
} else {
process.on("SIGHUP", function() {})
}
如下图:
- PM2
npm 地址: https://www.npmjs.com/package/pm2
带有内置负载均衡器的 Node.JS 应用程序的生产流程管理器。更全面,更适合生产。为我们提供许多参数来调整/采取行动。
安装
npm i pm2
如下图:
- Concurrently
npm 地址: https://www.npmjs.com/package/concurrently
简单直接 - 用于同时运行多个命令的有用工具。
安装
npm i concurrently
案例
const concurrently = require('concurrently');
const { result } = concurrently(
[
'npm:watch-*',
{ command: 'nodemon', name: 'server' },
{ command: 'deploy', name: 'deploy', env: { PUBLIC_KEY: '...' } },
{
command: 'watch',
name: 'watch',
cwd: path.resolve(__dirname, 'scripts/watchers'),
},
],
{
prefix: 'name',
killOthers: ['failure', 'success'],
restartTries: 3,
cwd: path.resolve(__dirname, 'scripts'),
}
);
result.then(success, failure);
如下图:
CLI 和调试器npm集合
- Commander
npm 地址: https://www.npmjs.com/package/commander
提供流畅的 API 用于定义 CLI 应用程序的各个方面,例如命令、选项、别名和帮助。简化命令行应用程序的创建。
安装
npm i commander
案例
const { program } = require('commander');
program
.option('--first')
.option('-s, --separator <char>');
program.parse();
const options = program.opts();
const limit = options.first ? 1 : undefined;
console.log(program.args[0].split(options.separator, limit));
如下图:
- Inquirer
npm 地址: https://www.npmjs.com/package/inquirer
用于 Node.js 的易于嵌入且美观的命令行界面。提供很棒的查询会话流程。
安装
npm i inquirer
案例
import inquirer from 'inquirer';
inquirer
.prompt([
/* Pass your questions in here */
])
.then((answers) => {
// Use user feedback for... whatever!!
})
.catch((error) => {
if (error.isTtyError) {
// Prompt couldn't be rendered in the current environment
} else {
// Something else went wrong
}
});
如下图:
- Chalk
npm 地址: https://www.npmjs.com/package/chalk
Chalk 是一个非常简单的库,创建一个简单的目的 - 为我们的终端字符串设置样式。
安装
npm i chalk
案例
import chalk from 'chalk';
console.log(chalk.blue('Hello world!'));
如下图:
- Debug
npm 地址: https://www.npmjs.com/package/debug
一个小型的 JavaScript 调试工具。只需将模块名称传递给函数,它就会返回console.error 的修饰版本,供我们传递调试语句。
安装
npm i debug
案例
var debug = require('debug')('http')
, http = require('http')
, name = 'My App';
// fake app
debug('booting %o', name);
http.createServer(function(req, res){
debug(req.method + ' ' + req.url);
res.end('hello\n');
}).listen(3000, function(){
debug('listening');
});
// fake worker of some kind
require('./worker');
如下图:
实用程序npm集合
- Lodash
npm 地址: https://www.npmjs.com/package/lodash
提供模块化、性能和附加功能的现代 JavaScript 实用程序库。在 JavaScript 数组、对象和其他数据结构上公开了许多有用的方法。
安装
npm i lodash
案例
// Load the full build.
var _ = require('lodash');
// Load the core build.
var _ = require('lodash/core');
// Load the FP build for immutable auto-curried iteratee-first data-last methods.
var fp = require('lodash/fp');
// Load method categories.
var array = require('lodash/array');
var object = require('lodash/fp/object');
// Cherry-pick methods for smaller browserify/rollup/webpack bundles.
var at = require('lodash/at');
var curryN = require('lodash/fp/curryN');
如下图:
- Underscore
npm 地址: https://www.npmjs.com/package/underscore
Underscore 提供了许多常用的函数助手以及更专业的好东西:函数绑定、javascript 模板、创建快速索引、深度相等测试等。
安装
npm i underscore
如下图:
- Async
npm 地址: https://www.npmjs.com/package/async
Async 是一个实用模块,它为使用异步 JavaScript 提供了直接、强大的功能。
安装
npm i async
案例
// for use with Node-style callbacks...
var async = require("async");
var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"};
var configs = {};
async.forEachOf(obj, (value, key, callback) => {
fs.readFile(__dirname + value, "utf8", (err, data) => {
if (err) return callback(err);
try {
configs[key] = JSON.parse(data);
} catch (e) {
return callback(e);
}
callback();
});
}, err => {
if (err) console.error(err.message);
// configs is now a map of JSON data
doSomethingWith(configs);
});
如下图:
系统模块npm集合
- Fs-extra
npm 地址:https://www.npmjs.com/package/fs-extra
Fs-extra 包含原版 Node.js fs 包中未包含的方法,例如 copy()、remove()、mkdirs()。
安装
npm i fs-extra
案例
const fs = require('fs-extra')
// Async with promises:
fs.copy('/tmp/myfile', '/tmp/mynewfile')
.then(() => console.log('success!'))
.catch(err => console.error(err))
// Async with callbacks:
fs.copy('/tmp/myfile', '/tmp/mynewfile', err => {
if (err) return console.error(err)
console.log('success!')
})
// Sync:
try {
fs.copySync('/tmp/myfile', '/tmp/mynewfile')
console.log('success!')
} catch (err) {
console.error(err)
}
// Async/Await:
async function copyFiles () {
try {
await fs.copy('/tmp/myfile', '/tmp/mynewfile')
console.log('success!')
} catch (err) {
console.error(err)
}
}
copyFiles()
如下图:
- Node-dir
npm 地址:https://www.npmjs.com/package/node-dir
用于一些常见目录和文件操作的模块,包括用于获取文件数组、子目录以及读取和处理文件内容的方法。
安装
npm i node-dir
案例
// display contents of files in this script's directory
dir.readFiles(__dirname,
function(err, content, next) {
if (err) throw err;
console.log('content:', content);
next();
},
function(err, files){
if (err) throw err;
console.log('finished reading files:', files);
});
// display contents of huge files in this script's directory
dir.readFilesStream(__dirname,
function(err, stream, next) {
if (err) throw err;
var content = '';
stream.on('data',function(buffer) {
content += buffer.toString();
});
stream.on('end',function() {
console.log('content:', content);
next();
});
},
function(err, files){
if (err) throw err;
console.log('finished reading files:', files);
});
// match only filenames with a .txt extension and that don't start with a `.´
dir.readFiles(__dirname, {
match: /.txt$/,
exclude: /^\./
}, function(err, content, next) {
if (err) throw err;
console.log('content:', content);
next();
},
function(err, files){
if (err) throw err;
console.log('finished reading files:',files);
});
// exclude an array of subdirectory names
dir.readFiles(__dirname, {
exclude: ['node_modules', 'test']
}, function(err, content, next) {
if (err) throw err;
console.log('content:', content);
next();
},
function(err, files){
if (err) throw err;
console.log('finished reading files:',files);
});
// the callback for each file can optionally have a filename argument as its 3rd parameter
// and the finishedCallback argument is optional, e.g.
dir.readFiles(__dirname, function(err, content, filename, next) {
console.log('processing content of file', filename);
next();
});
如下图:
- Node-cache
npm 地址:https://www.npmjs.com/package/node-cache
一个简单的缓存模块,具有设置、获取和删除方法,工作方式有点像 memcached。密钥可以有一个超时 (ttl),之后它们就会过期并从缓存中删除。
安装
npm i node-cache
案例
myCache = new NodeCache( { stdTTL: 100 } )
// Date.now() = 1456000500000
myCache.set( "ttlKey", "MyExpireData" )
myCache.set( "noTtlKey", "NonExpireData", 0 )
ts = myCache.getTtl( "ttlKey" )
// ts wil be approximately 1456000600000
ts = myCache.getTtl( "ttlKey" )
// ts wil be approximately 1456000600000
ts = myCache.getTtl( "noTtlKey" )
// ts = 0
ts = myCache.getTtl( "unknownKey" )
// ts = undefined
如下图:
其他npm集合
- Helmet
npm 地址: https://www.npmjs.com/package/helmet
通过设置各种 HTTP 标头来帮助我们保护我们的应用程序。它是 Connect 风格的中间件,与 Express 等框架兼容。
安装
npm i helmet
案例
import * as helmet from "helmet";
// ...
app.use(helmet.contentSecurityPolicy());
app.use(helmet.crossOriginEmbedderPolicy());
app.use(helmet.crossOriginOpenerPolicy());
app.use(helmet.crossOriginResourcePolicy());
app.use(helmet.dnsPrefetchControl());
app.use(helmet.expectCt());
app.use(helmet.frameguard());
app.use(helmet.hidePoweredBy());
app.use(helmet.hsts());
app.use(helmet.ieNoOpen());
app.use(helmet.noSniff());
app.use(helmet.originAgentCluster());
app.use(helmet.permittedCrossDomainPolicies());
app.use(helmet.referrerPolicy());
app.use(helmet.xssFilter());
如下图:
- PDFKit
npm 地址: https://www.npmjs.com/package/pdfkit
DFKit 是一个用于 Node 和浏览器的 PDF 文档生成库,可以轻松创建复杂的、多页的、可打印的文档。
安装
npm i pdfkit
案例
const PDFDocument = require('pdfkit');
const fs = require('fs');
// Create a document
const doc = new PDFDocument();
// Pipe its output somewhere, like to a file or HTTP response
// See below for browser usage
doc.pipe(fs.createWriteStream('output.pdf'));
// Embed a font, set the font size, and render some text
doc
.font('fonts/PalatinoBold.ttf')
.fontSize(25)
.text('Some text with an embedded font!', 100, 100);
// Add an image, constrain it to a given size, and center it vertically and horizontally
doc.image('path/to/image.png', {
fit: [250, 300],
align: 'center',
valign: 'center'
});
// Add another page
doc
.addPage()
.fontSize(25)
.text('Here is some vector graphics...', 100, 100);
// Draw a triangle
doc
.save()
.moveTo(100, 150)
.lineTo(100, 250)
.lineTo(200, 250)
.fill('#FF3300');
// Apply some transforms and render an SVG path with the 'even-odd' fill rule
doc
.scale(0.6)
.translate(470, -380)
.path('M 250,75 L 323,301 131,161 369,161 177,301 z')
.fill('red', 'even-odd')
.restore();
// Add some text with annotations
doc
.addPage()
.fillColor('blue')
.text('Here is a link!', 100, 100)
.underline(100, 100, 160, 27, { color: '#0000FF' })
.link(100, 100, 160, 27, 'http://google.com/');
// Finalize PDF file
doc.end();
如下图:
- CSV
npm 地址: https://www.npmjs.com/package/csv
全面的 CSV 套件结合了 4 个经过良好测试的包来生成、解析、转换和字符串化 CSV 数据。
安装
npm i csv
案例
// Import the package
import * as csv from '../lib/index.js';
// Run the pipeline
csv
// Generate 20 records
.generate({
delimiter: '|',
length: 20
})
// Transform CSV data into records
.pipe(csv.parse({
delimiter: '|'
}))
// Transform each value into uppercase
.pipe(csv.transform((record) => {
return record.map((value) => {
return value.toUpperCase();
});
}))
// Convert objects into a stream
.pipe(csv.stringify({
quoted: true
}))
// Print the CSV stream to stdout
.pipe(process.stdout);
如下图:
- Marked
npm 地址: https://www.npmjs.com/package/marked
用于解析 Markdown 的低级编译器,无需长时间缓存或阻塞。
安装
npm i marked
案例
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>Marked in the browser</title>
</head>
<body>
<div id="content"></div>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script>
document.getElementById('content').innerHTML =
marked.parse('# Marked in the browser\n\nRendered by **marked**.');
</script>
</body>
</html>
如下图:
- Randomcolor
npm 地址: https://www.npmjs.com/package/randomcolor
用于生成有吸引力的随机颜色的小脚本。我们可以传递一个选项对象来影响它产生的颜色类型。
安装
npm i randomcolor
案例
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>Marked in the browser</title>
</head>
<body>
<div id="content"></div>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script>
document.getElementById('content').innerHTML =
marked.parse('# Marked in the browser\n\nRendered by **marked**.');
</script>
</body>
</html>
如下图:
- Pluralize
npm 地址: https://www.npmjs.com/package/pluralize
该模块使用预先定义的规则列表,按顺序应用,以单数或复数给定的单词。在很多情况下这很有用,例如,任何基于用户输入的自动化。
安装
npm i pluralize
案例
pluralize('test') //=> "tests"
pluralize('test', 0) //=> "tests"
pluralize('test', 1) //=> "test"
pluralize('test', 5) //=> "tests"
pluralize('test', 1, true) //=> "1 test"
pluralize('test', 5, true) //=> "5 tests"
pluralize('蘋果', 2, true) //=> "2 蘋果"
// Example of new plural rule:
pluralize.plural('regex') //=> "regexes"
pluralize.addPluralRule(/gex$/i, 'gexii')
pluralize.plural('regex') //=> "regexii"
// Example of new singular rule:
pluralize.singular('singles') //=> "single"
pluralize.addSingularRule(/singles$/i, 'singular')
pluralize.singular('singles') //=> "singular"
// Example of new irregular rule, e.g. "I" -> "we":
pluralize.plural('irregular') //=> "irregulars"
pluralize.addIrregularRule('irregular', 'regular')
pluralize.plural('irregular') //=> "regular"
// Example of uncountable rule (rules without singular/plural in context):
pluralize.plural('paper') //=> "papers"
pluralize.addUncountableRule('paper')
pluralize.plural('paper') //=> "paper"
// Example of asking whether a word looks singular or plural:
pluralize.isPlural('test') //=> false
pluralize.isSingular('test') //=> true
如下图:
最后
一台电脑,一个键盘,尽情挥洒智慧的人生;
几行数字,几个字母,认真编写生活的美好;
一 个灵感,一段程序,推动科技进步,促进社会发展。
创作不易,喜欢的老铁们加个关注,点个赞,打个赏,后面会不定期更新干货和技术相关的资讯,速速收藏,谢谢!你们的一个小小举动就是对小编的认可,更是创作的动力。