今天想到js本身是弱类型,在实际项目中很多时候需要数据类型检测。于是打算做一个判断数据类型的js插件,发布到npm上面。

基本思路:

1,输入参数,便返回数据类型,所有数据类型如下

   '[object String]': 'string',
"[object Boolean]": "boolean",
"[object Number]": 'number',
"[object Null]": 'null',
"[object Undefined]": "undefined",
"[object Array]": 'array',
'[object Object]': 'object',
'[object Set]': 'set',
'[object Map]': 'map',
'[object Symbol]':'symbol',
'[object Function]':'function',
'[object RegExp]':'regExp',
'[object Window]':'window',
'NaN':'NaN'

使用的判断方法:Object.prototype.toString.call()

2,利用webpack作为工程化工具,webpack.config.js

var path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin'); //installed via npm
const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); var config = {
mode: 'development',
entry: [
path.resolve(__dirname, './src/example.js')
],
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].js',
libraryTarget: "umd", //一套完整的规范 cmd amd
},
devServer: {
contentBase: './dist'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
},
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true
}) ],
optimization: {
minimize: true, minimizer: [
new UglifyJsPlugin({
test: /\.js(\?.*)?$/i,
}),
],
}
}; module.exports = config;

package.js

{
"name": "zhen-check",
"version": "1.4.0",
"description": "check type of data ",
"main": "src/index.js", // 注意这里是index的路径不要写为index.js
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack-dev-server --inline --progress --config webpack.config.js",
"prod": "webpack --config webpack.config.js"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.4.5",
"@babel/preset-env": "^7.4.5",
"babel-core": "^6.26.3",
"babel-loader": "^8.0.6",
"babel-preset-env": "^1.7.0",
"html-webpack-plugin": "^3.2.0",
"uglifyjs-webpack-plugin": "^2.1.3",
"webpack": "^4.35.0",
"webpack-cli": "^3.3.5",
"webpack-dev-server": "^3.7.2",
"zhen-check": "^1.4.0"
}
}

然后,利用在命令行工具使用npm adduser 输出登录的账号和密码,然后使用npm publish发布。

以上完成。

开发过程中有几个注意事项:

1,之所以可以通过import的方式引入,是通过package.js文件的main连接的,所以main后面要写插件的导出文件

2,webpack.config.js配置文件里面,output的配置

  output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].js',
libraryTarget: "umd", //一套完整的规范 cmd amd
}
libraryTarget 配置为umd。允许amd,cmd规则引入

 

发布js插件zhen-chek(用来检测数据类型)到npm上的更多相关文章

  1. ajaxfileupload.js插件结合一般处理文件实现Ajax无刷新上传

    先上几张图更直观展示一下要实现的功能.本功能主要通过Jquery ajaxfileupload.js插件结合ajaxUpFile.ashx一般应用程序处理文件实现Ajax无刷新上传功能,结合NPOI2 ...

  2. bootstrap实现 手机端滑动效果,滑动到下一页,jgestures.js插件

    bootstrap能否实现 手机端滑动效果,滑动到下一页 jgestures.js插件可以解决,只需要引入一个JS文件<script src="js/jgestures.min.js& ...

  3. Bootstrap transition.js 插件

    Bootstrap transition.js 插件详解   Bootstrap 自带的 JavaScript 插件的动画效果几乎都是使用 CSS 过渡实现的,而其中的 transition.js 就 ...

  4. Bootstrap入门(二十五)JS插件2:过渡效果

    Bootstrap入门(二十五)JS插件2:过渡效果 对于简单的过渡效果,只需将 transition.js 和其它 JS 文件一起引入即可.如果你使用的是编译(或压缩)版的bootstrap.js  ...

  5. 前端开发需要了解的JS插件

    excanvas.js/Chart.js/cubism.js/d3.js/dc.js/dx.chartjs.js/echarts.js/flot.js 用途:构建数据统计图表,兼容多浏览器 jquer ...

  6. 原生JS插件(超详细)

    作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高呢?当然是利用js纯原生的写法啦. ...

  7. 如何定义一个高逼格的原生JS插件

    插件的需求 我们写代码,并不是所有的业务或者逻辑代码都要抽出来复用.首先,我们得看一下是否需要将一部分经常重复的代码抽象出来,写到一个单独的文件中为以后再次使用.再看一下我们的业务逻辑是否可以为团队服 ...

  8. vue封装插件并发布到npm上

    vue封装插件并发布到npm上 项目初始化 首先,要创建项目,封装vue的插件用webpack-simple很合适,vue init webpack-simple 项目名称此命令创建我们的项目的目录, ...

  9. jQuery 关于ajaxfileupload.js插件的逐步解析(ajaxfileupload.js第二弹)

    如果你看了上一篇<ASP.NET 使用ajaxfileupload.js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹)>的话,应该就知道我是逼不得已要认真学 ...

随机推荐

  1. instanceof解析

    https://www.zhihu.com/question/21574535/answer/18998914 Java instanceof 关键字是如何实现的? 基本理解 只是在同一个类加载器加载 ...

  2. Spring Cloud(O)服务的注册与发现(Eureka)

    一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通过负载均衡设备共同对外提供服务 1.3 ...

  3. What is libacl.so.1 ?

    Google says, "This package contains the libacl.so dynamic library which contains the POSIX 1003 ...

  4. centos所有版本镜像下载地址

    centos所有版本镜像下载地址 版本号 下载地址 更新时间 centos2.1  iso镜像下载 2.1/ 2009/8/19  1:36 centos3.1  iso镜像下载 3.1/ 2005/ ...

  5. python笔记:学习设置Python虚拟环境+配置 virtualenvwarpper+创建Python3.6的虚拟环境+安装numpy

    虚拟环境它是一个虚拟化,从电脑独立开辟出来的环境.就是借助虚拟机docker来把一部分内容独立出来,我们把这部分独立出来的东西称作“容器”,在这个容器中,我们可以只安装我们需要的依赖包,各个容器之间互 ...

  6. redis + boost.asio

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  7. git 忽略部分文件

    忽略:  git update-index --assume-unchanged .mymetadata    取消忽略: git update-index --no-assume-unchanged

  8. 如何低成本搭建dnslog服务器

    DNSLog,简单来说,就是通过记录对于域名的DNS请求,通过dns请求这个相对"隐蔽"的渠道,来委婉地获取到想要获得的信息. 例如,在一个针对mysql数据库的注入中,如果没有回 ...

  9. Ubuntu本地软件源制作

    操作 获取需要的deb包 #执行安装后,安装的包会保存在/var/cache/apt/archives 目录下 apt-get install vim #查看 正在处理用于 man-db (2.8.7 ...

  10. Codeforces Round #456 (Div. 2) 912D D. Fishes

    题: OvO http://codeforces.com/contest/912/problem/D 解: 枚举每一条鱼,每放一条鱼,必然放到最优的位置,而最优位置即使钓上的概率最大的位置,即最多的r ...