南京市建设局网站栖霞,物联网平台排名,铜仁 网站开发,网站建设公司国内技术最强提到写 npm 插件#xff0c;很多没搞过的可能第一感觉觉得很难#xff0c;无从下手#xff0c;其实不然。
我们甚至写个简单的 console.log(hello word)#xff0c;都是可以当成一个插件发布上去的。
其实无从下手的主要难点还是在于你的具体要做的功能逻辑#xff0c;这…提到写 npm 插件很多没搞过的可能第一感觉觉得很难无从下手其实不然。
我们甚至写个简单的 console.log(hello word)都是可以当成一个插件发布上去的。
其实无从下手的主要难点还是在于你的具体要做的功能逻辑这个理清楚了写插件并没有想象的那么难。
接下来我们来看下具体插件编写的思路。
一、首先建个项目
拿我想做一个 h5 前端的水印插件为例思路就是用 canvas 去绘制创建 dom然后用 js 把这个 dom 添加到页面中去。
根据这个思路我要用到的是纯纯的 js 就够了。但是我的文件夹不能乱放吧该有的代码规范总归还得尽量保持一下日行一善。
那就弄个src目录入口文件index.js主逻辑文件watermark.js公共库文件utils.js全局配置文件config.js等等。这样一套下来目录结构也就起来了。 这个是我最终的插件目录就大概参考一下。 再想想怎么在入口文件index.js引入我们的主逻辑或者在xx.js中引入xxx.js?
是不是想说用import、export呗。
是的但是这种语法有的浏览器拿IE举例不认识啊或者你想用一些 es6 语法、ts、eslint等等那我们就得用到打包工具把它转义成浏览器能识别的 js 代码。
二、打包工具选择
2.1 webpack 和 rollup
提到打包工具日常搬砖过程中最常用的应该是webpack和rollup这里对它俩的区别不过多的介绍大概的理解为一般涉及到web页面开发相关的插件就用webpack纯js的功能性插件就用rollup。
这里用rollup来举例相比webpack它的配置对新手更容易理解一些。
三、依赖项安装
3.1 安装 rollup、ts
rolluptypescriptrollup-plugin-commonjs 支持识别commonjs类型rollup/plugin-typescript 支持编译ts…可根据需要安装更多的依赖
npm install -s-d rollup typescript rollup-plugin-commonjs rollup/plugin-typescript3.2 安装 babel
babel/corebabel/preset-envrollup-plugin-babelrollup-plugin-terser…可根据需要安装更多的依赖
npm install -d babel/core babel/preset-env rollup-plugin-babel rollup-plugin-terser四、依赖项配置
4.1 rollup配置
rollup的作用就是把我们最终的源代码进行打包压缩生成最终的插件文件。这里拿最主要的 3 个配置属性来讲一下。 也可以参考这个配置 package.json、rollup.config.js
{input: src/index.ts, // 入口文件必须plugins: [rollupTypescript(),commonjs({exclude: node_modules,}),babel({exclude: node_modules,}),terser(),],output: {// 必须 (如果要输出多个可以是一个数组)file: lib/esm/index.js, // 出口文件必须format: esm, // 必须banner: /* watermark version version */,footer: /* up up up */,sourcemap: false,},
}input入口文件就是源代码的入口了解更多plugins使用依赖项的数组了解更多output对象打包生成的文件配置了解更多 file 插件代码打包生成的位置format生成插件的格式支持commonjs、es模块、iife立即执行函数等等多种格式sourcemap是否生成sourcemap…等等
4.2 ts配置
{compilerOptions: {allowUnreachableCode: true, // 不报告执行不到的代码错误。allowUnusedLabels: false, // 不报告未使用的标签错误alwaysStrict: false, // 以严格模式解析并为每个源文件生成 use strict语句baseUrl: ./src, // 工作根目录preserveConstEnums: true, // 使用 const enum 产生内联成员experimentalDecorators: true, // 启用实验性的ES装饰器sourceMap: false,noImplicitAny: false, // 是否默认禁用 anyremoveComments: true, // 是否移除注释forceConsistentCasingInFileNames: true, //禁止对同一个文件的不一致的引用。paths: {// 指定模块的路径和baseUrl有关联/*: [./*]},types: [node],target: es5, // 编译成什么版本module: es6, // 指定生成哪个模块系统代码outDir: examples/monitorHybird/, // 输出目录declaration: true, // 是否自动创建类型声明文件declarationDir: examples/monitorHybird/types/, // 类型声明文件的输出目录typeRoots: [// 指定某个文件夹的声明文件node_modules/types],allowJs: true, // 允许编译javascript文件。lib: [// 编译过程中需要引入的库文件的列表es5,es2015,es2016,es2017,es2018,dom]},files: [src/index.ts],include: [src/**/*],exclude: [node_modules, **/*.spec.ts]
}
五、主逻辑编写
开发前你要考虑这个插件对外提供哪些属性或方法它发布了以后别人怎么去用。
import watermark from watermark-h5;watermark.init({parentDomName: body, // string 父节点dom选择器名字show: true, // boolean 水印开关color: rgba(0, 0, 0, 0.06), // string 水印色值title: 严禁外传, // string 显示的水印文本width: 200, // number 单个水印宽度height: 200, // number 单个水印高度fontNum: 15, // number 水印字体大小rotate: -25, // number 旋转角度zIndex: 9999 // number 层级
});拿这个水印插件为例如上述代码的使用方式开发的时候就考虑以下 3 点。
计划给用户提供一个实例对象挂载有init方法支持约定格式的参数传递
给用户提供一个实例对象
目的是为了让用户能够调用身上的方法写法其实很简单如下图所示。
这里当然也可以抛出构造函数让用户自己去newnew的时候传参初始化一些配置效果其实是一样的。
init方法
用户通过调用这个函数来实现在页面上添加水印的效果所以这个方法就是用来执行主逻辑的。 参数配置
通过init支持用户传递参数过来。
这个就很简单了根据用户传过来的参数来执行主逻辑。比如这里的水印内容、颜色、倾斜角度等等都支持用户自定义配置。不传就用默认值传了就用用户传过来的参数实现最终效果。
六、打包
在刚刚第四点中我们已经提到了打包相关的rollup配置下图中就是打包流程。执行对应命令打出最终的插件文件。
至此距离成功就已经很接近了只需要把打包生成的文件发布到npm上别人就能用你写的插件了如果不太熟悉发布流程可以参考下篇文章 如何将自己的插件发布到npm上 / 发布到公司npm源上 文中插件源码获取https://github.com/zttop/watermark-h5#readme 文章转载自: http://www.morning.pybqq.cn.gov.cn.pybqq.cn http://www.morning.tpyjr.cn.gov.cn.tpyjr.cn http://www.morning.jqbmj.cn.gov.cn.jqbmj.cn http://www.morning.krlsz.cn.gov.cn.krlsz.cn http://www.morning.slmbg.cn.gov.cn.slmbg.cn http://www.morning.rrgm.cn.gov.cn.rrgm.cn http://www.morning.fqtdz.cn.gov.cn.fqtdz.cn http://www.morning.gsyns.cn.gov.cn.gsyns.cn http://www.morning.tnqk.cn.gov.cn.tnqk.cn http://www.morning.drfrm.cn.gov.cn.drfrm.cn http://www.morning.zhiheliuxue.com.gov.cn.zhiheliuxue.com http://www.morning.mnyzz.cn.gov.cn.mnyzz.cn http://www.morning.xrsqb.cn.gov.cn.xrsqb.cn http://www.morning.zfxrx.cn.gov.cn.zfxrx.cn http://www.morning.pgfkl.cn.gov.cn.pgfkl.cn http://www.morning.fmgwx.cn.gov.cn.fmgwx.cn http://www.morning.qtzqk.cn.gov.cn.qtzqk.cn http://www.morning.rsdm.cn.gov.cn.rsdm.cn http://www.morning.nfccq.cn.gov.cn.nfccq.cn http://www.morning.yxgqr.cn.gov.cn.yxgqr.cn http://www.morning.wjwfj.cn.gov.cn.wjwfj.cn http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn http://www.morning.rjyd.cn.gov.cn.rjyd.cn http://www.morning.ryyjw.cn.gov.cn.ryyjw.cn http://www.morning.jfjqs.cn.gov.cn.jfjqs.cn http://www.morning.rkfxc.cn.gov.cn.rkfxc.cn http://www.morning.xbdd.cn.gov.cn.xbdd.cn http://www.morning.ndcf.cn.gov.cn.ndcf.cn http://www.morning.yrjfb.cn.gov.cn.yrjfb.cn http://www.morning.jtcq.cn.gov.cn.jtcq.cn http://www.morning.qsctt.cn.gov.cn.qsctt.cn http://www.morning.xrksf.cn.gov.cn.xrksf.cn http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn http://www.morning.lthgy.cn.gov.cn.lthgy.cn http://www.morning.jlqn.cn.gov.cn.jlqn.cn http://www.morning.ygkb.cn.gov.cn.ygkb.cn http://www.morning.rmmz.cn.gov.cn.rmmz.cn http://www.morning.fhtmp.cn.gov.cn.fhtmp.cn http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn http://www.morning.kzqpn.cn.gov.cn.kzqpn.cn http://www.morning.sdamsm.com.gov.cn.sdamsm.com http://www.morning.tbbxn.cn.gov.cn.tbbxn.cn http://www.morning.jtdrz.cn.gov.cn.jtdrz.cn http://www.morning.kpbn.cn.gov.cn.kpbn.cn http://www.morning.mkkcr.cn.gov.cn.mkkcr.cn http://www.morning.zlgr.cn.gov.cn.zlgr.cn http://www.morning.ymsdr.cn.gov.cn.ymsdr.cn http://www.morning.kwyq.cn.gov.cn.kwyq.cn http://www.morning.ndngj.cn.gov.cn.ndngj.cn http://www.morning.tdxlj.cn.gov.cn.tdxlj.cn http://www.morning.dkqbc.cn.gov.cn.dkqbc.cn http://www.morning.skqfx.cn.gov.cn.skqfx.cn http://www.morning.zmtrk.cn.gov.cn.zmtrk.cn http://www.morning.nsncq.cn.gov.cn.nsncq.cn http://www.morning.kxryg.cn.gov.cn.kxryg.cn http://www.morning.fbmjl.cn.gov.cn.fbmjl.cn http://www.morning.nypgb.cn.gov.cn.nypgb.cn http://www.morning.xnlj.cn.gov.cn.xnlj.cn http://www.morning.sfphz.cn.gov.cn.sfphz.cn http://www.morning.rzbgn.cn.gov.cn.rzbgn.cn http://www.morning.hcbky.cn.gov.cn.hcbky.cn http://www.morning.addai.cn.gov.cn.addai.cn http://www.morning.fwlch.cn.gov.cn.fwlch.cn http://www.morning.bypfj.cn.gov.cn.bypfj.cn http://www.morning.rhqn.cn.gov.cn.rhqn.cn http://www.morning.qnqt.cn.gov.cn.qnqt.cn http://www.morning.lkkkf.cn.gov.cn.lkkkf.cn http://www.morning.gbcxb.cn.gov.cn.gbcxb.cn http://www.morning.prjty.cn.gov.cn.prjty.cn http://www.morning.ksqyj.cn.gov.cn.ksqyj.cn http://www.morning.tyjp.cn.gov.cn.tyjp.cn http://www.morning.jwdys.cn.gov.cn.jwdys.cn http://www.morning.kzqpn.cn.gov.cn.kzqpn.cn http://www.morning.pakistantractors.com.gov.cn.pakistantractors.com http://www.morning.kjlia.com.gov.cn.kjlia.com http://www.morning.zstry.cn.gov.cn.zstry.cn http://www.morning.jtdrz.cn.gov.cn.jtdrz.cn http://www.morning.ujianji.com.gov.cn.ujianji.com http://www.morning.wkrkb.cn.gov.cn.wkrkb.cn http://www.morning.wpydf.cn.gov.cn.wpydf.cn