JS相关
jquery
- npm安装地址:https://www.npmjs.com/package/jquery
- 官网地址:http://jquery.com/
moment
日期处理类库
- npm安装地址:https://www.npmjs.com/package/moment
- 官网地址:http://momentjs.cn/
moment().format('MMMM Do YYYY, h:mm:ss a'); // 一月 3日 2019, 1:51:46 下午
moment().format('dddd'); // 星期四
moment().format("MMM Do YY"); // 1月 3日 19
moment().format('YYYY [escaped] YYYY'); // 2019 escaped 2019
moment().format(); // 2019-01-03T13:51:46+08:00
http请求
axios
支持浏览器和node.js
支持promise
能拦截请求和响应
能转换请求和响应数据
能取消请求
自动转换JSON数据
浏览器端支持防止CSRF(跨站请求伪造)
- get方式
axios.get('/user', {
params: {
ID: 12345
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
- post方式
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
- 参数项方式
axios({
method: 'post',
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
}).then(function(response) {
response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
});
whatwg-fetch
fetch()函数是一种基于promise的机制,用于在浏览器中以编程方式发出web请求。这个项目是一个实现了标准Fetch规范子集的polyfill,足以使Fetch成为传统web应用程序中XMLHttpRequest的大多数用法的可行替代。
- npm安装地址:https://www.npmjs.com/package/whatwg-fetch
- HTML
import {fetch} from 'whatwg-fetch';
fetch('/users.html')
.then(function(response) {
return response.text()
}).then(function(body) {
document.body.innerHTML = body
})
- XHR
import {fetch} from 'whatwg-fetch';
fetch('/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Hubot',
login: 'hubot',
})
})
- JSON
import {fetch} from 'whatwg-fetch';
fetch('/users.json')
.then(function(response) {
return response.json()
}).then(function(json) {
console.log('parsed json', json)
}).catch(function(ex) {
console.log('parsing failed', ex)
})
数据处理
loadash
lodash是一个一致性、模块化、高性能的 JavaScript 实用工具库。
_.defaults({ 'a': 1 }, { 'a': 3, 'b': 2 });
// → { 'a': 1, 'b': 2 }
_.partition([1, 2, 3, 4], n => n % 2);
// → [[1, 3], [2, 4]]
object-assign
ES2015 Object.assign() ponyfill
const objectAssign = require('object-assign');
objectAssign({foo: 0}, {bar: 1});
immutability-helper
在不更改原始源的情况下更改数据副本
import update from 'immutability-helper';
const newData = update(myData, {
x: {y: {z: {$set: 7}}},
a: {b: {$push: [9]}}
});
serialize-javascript
将JavaScript序列化为包含正则表达式、日期和函数的JSON超集。
var serialize = require('serialize-javascript');
serialize({
str : 'string',
num : 0,
obj : {foo: 'foo'},
arr : [1, 2, 3],
bool : true,
nil : null,
undef: undefined,
date: new Date("Thu, 28 Apr 2016 22:02:17 GMT"),
fn: function echo(arg) { return arg; },
re: /([^\s]+)/g
});
'{"str":"string","num":0,"obj":{"foo":"foo"},"arr":[1,2,3],"bool":true,"nil":null,date:new Date("2016-04-28T22:02:17.156Z"),"fn":function echo(arg) { return arg; },"re":/([^\\s]+)/g}'
promise
promise
promise类库
- npm安装地址:https://www.npmjs.com/package/promise
- mdn文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
var Promise = require('promise');
var promise = new Promise(function (resolve, reject) {
get('http://www.google.com', function (err, res) {
if (err) reject(err);
else resolve(res);
});
});
promise-polyfill
轻量级的promise,使不支持promise的浏览器和node支持promise语法
import 'promise-polyfill/src/polyfill';
ES6-Promise
可以理解为上面两个的合集
- promise
var Promise = require('es6-promise').Promise;
- promise-polyfill
require('es6-promise').polyfill();
bluebird
Bluebird是一个功能齐全的promise库,专注于创新的功能和性能
var Promise = require("bluebird");
// Enable cancellation
Promise.config({cancellation: true});
var fs = Promise.promisifyAll(require("fs"));
// In 2000ms or less, load & parse a file 'config.json'
var p = Promise.resolve('./config.json')
.timeout(2000)
.catch(console.error.bind(console, 'Failed to load config!'))
.then(fs.readFileAsync)
.then(JSON.parse);
// Listen for exception event to trigger promise cancellation
process.on('unhandledException', function(event) {
// cancel config loading
p.cancel();
});
co
Generator基于的控制流,有益于nodejs和浏览器,使用promise,让您以一种友好的方式编写非阻塞代码。
- npm安装地址:https://www.npmjs.com/package/co
- 示例1
co(function* () {
var result = yield Promise.resolve(true);
return result;
}).then(function (value) {
console.log(value);
}, function (err) {
console.error(err.stack);
});
- 示例2
co(function *(){
// resolve multiple promises in parallel
var a = Promise.resolve(1);
var b = Promise.resolve(2);
var c = Promise.resolve(3);
var res = yield [a, b, c];
console.log(res);
// => [1, 2, 3]
}).catch(onerror);
babel
babel
转换ES6语法为ES5语法
babel/core
babel编译器的核心。
babel-jest
如果您已经在使用jest-cli,只需添加babel-jest,它将使用babel自动编译JavaScript代码。
babel-loader
babel加载器
- 淘宝安装地址:https://npm.taobao.org/package/babel-loader
- webpack使用:https://webpack.docschina.org/loaders/babel-loader/
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
babel-runtime
babel模块化运行时助手
babel-plugin-import
[
{
"libraryName": "antd",
"libraryDirectory": "lib", // default: lib
"style": true
},
{
"libraryName": "antd-mobile"
},
]
babel-preset-react
preset-flow 预设流
syntax-jsx jsx语法
transform-react-jsx 转换react jsx语法
transform-react-display-name 转换react显示名称
.babelrc配置
{
"presets": ["react"]
}
babel-preset-react-app
针对create-react-app的Babel预置。
.babelrc文件
{
"presets": ["react-app"]
}
typescript
TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。TypeScript可以在任何浏览器、任何计算机和任何操作系统上运行,并且是开源的。
- npm安装地址:https://www.npmjs.com/package/typescript
- 官网:http://www.typescriptlang.org/
- 中文网:https://www.tslang.cn/
- 入门教程推荐:https://ts.xcatliu.com/
ts-loader
typescript加载器
- npm安装地址:https://www.npmjs.com/package/ts-loader
- webpack使用:https://webpack.docschina.org/guides/typescript/
const path = require('path');
module.exports = {
entry: './src/index.ts',
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
}
]
},
resolve: {
extensions: [ '.tsx', '.ts', '.js' ]
},
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
pubsub-js
处理发布订阅的类库
import PubSub from 'pubsub-js';
var mySubscriber = function (msg, data) {
console.log( msg, data );
};
var token = PubSub.subscribe('MY TOPIC', mySubscriber);
PubSub.publish('MY TOPIC', 'hello world!');
chalk
终端打印颜色定制
- npm安装地址:https://www.npmjs.com/package/chalk
const chalk = require('chalk');
console.log(chalk.blue('Hello world!'));
raf
为node和浏览器,提供支持requestAnimationFrame的polyfill
var raf = require('raf')
raf(function tick() {
// Animation logic
raf(tick)
})
resolve
实现node require.resolve()算法,以便您可以以异步和同步的方式代表文件请求.resolve()
var resolve = require('resolve');
resolve('tap', { basedir: __dirname }, function (err, res) {
if (err) console.error(err);
else console.log(res);
});