当前位置: 首页 > news >正文

长兴县建设局网站湘乡新闻头条

长兴县建设局网站,湘乡新闻头条,搜索引擎优化的主要特征,青岛网站排名方案序言 对于 webpack 来说#xff0c; loader 和 plugin 可以算是需求程度最为广泛的配置项了。但是呢#xff0c;单单止步于配置可能还不够。如果我们自己有时候想要 diy 一个需求#xff0c;但是 webpack 又没有相关的 loader 和 plugin 。那这个时候我们可能就得开始造点轮…序言 对于 webpack 来说 loader 和 plugin 可以算是需求程度最为广泛的配置项了。但是呢单单止步于配置可能还不够。如果我们自己有时候想要 diy 一个需求但是 webpack 又没有相关的 loader 和 plugin 。那这个时候我们可能就得开始造点轮子来供给自己使用了。 因此在今天的文章当中将带领大家手写一个简易的 loader 和 plugin 并学会如何在项目中运用自己所编写的 loader 和 plugin 。 一起来学习吧~ 一、如何编写一个Loader 1. 碎碎念 之前的文章中我们讲到了关于 loader 的一些配置。那如果把那些引用的 loader 改为我们写的 loader 该怎么处理呢 现在我们来了解一下如何手写一个简易的 loader 并运用到我们的项目当中。 2. 项目结构 首先用一张图来看我们的项目结构。如下图所示 其中 loaders 文件夹下放置我们想要写的 loader 同时里面的 replaceLoader.js 文件放置我们即将要写的 loader 的代码逻辑。之后index.js 文件是我们的入口文件放置我们的业务逻辑。 webpack.config.js 文件放置关于 webpack 的相关配置而 dist 文件夹内的内容放置的是我们通过 webpack 打包后生成的打包文件。 3. 业务代码编写 1入口文件代码 现在我们先来编写入口文件 index.js 的代码。具体代码如下 console.log(hello monday);2编写loader 入口文件的内容很简单我们想要达到的目的就是输出 hello monday 这个语句。现在我们来编写 loader 的内容已达到对入口文件 index.js 的内容进行修改。 replaceLoader.js 文件的代码具体如下 module.exports function(source) {const result source.replace(monday, mondaylab);this.callback(null, result); }以上的代码意思为将入口文件 index.js 文件中的 monday 替换为 mondaylab 。这样写似乎没啥问题但是大家有没有想过我们有时候传的属性可能会很诡异不一定每次都能像这样以字符串的形式来替换。 所以我们引用 webpack 官方推荐的 loadertils 这个工具来解决这个问题。 第一步 安装 loader-utils 插件。具体命令如下 npm install loader-utils --save-dev第二步 改造 loader 文件。接下来我们对 replaceLoader.js 文件进行改造升级具体代码如下 const loaderUtils require(loader-utils);//用function的原因在于为了业务层可以调用this //source为引入文件的源代码 module.exports function(source) {//getOptions会自动地帮我们分析this.query,然后把参数的所有内容放在options里面去const options loaderUtils.getOptions(this);const result source.replace(monday, options.name);this.callback(null, result); }大家可以看到通过使用 loaderUtils 插件间接地调用 getOptions 方法来自动的帮我们分析 this.query 从而取到我们想要的内容。 值得注意的是我们还需要再了解一下 this.callback 的内容。 一般情况下如果我们接收到了源代码 source 那么现在我们只能对源代码做处理。但是呢有的时候我们想要使用一些 sourceMap 或者对源代码分析好了之后我们不仅想要返回源代码还要把 sourceMap 也带回去。 因为我们 return 的时候只能 return 一个参数其余的一些额外的内容就带不出去了。这个时候呢我们就需要 this.callback 来帮我们把 sourceMap 给带出去。因此一般用 this.callback 来返回内容。 3引用loader 现在我们在 webpack.config.js 中来引入我们上面的 loader 。具体配置如下 const path require(path);module.exports {mode: development,entry: {main: ./src/index.js},module: {rules: [{test: /\.js/,use: [{loader: path.resolve(__dirname, ./loaders/replaceLoader.js),//上面的options.name中的nameoptions: {name: mondaylab}} ]}]},output: {path: path.resolve(__dirname, dist),filename: [name].js } }通过以上方式我们写了一个简易的 loader 这个 loader 实现了将 monday 替换为 mondaylab 的功能。并且供我们在 webpack 中使用自己书写的 loader 。 4在loader里面做一些异步的操作 好了现在如果我们想要给 loader 做一些异步操作该怎么实现呢 在我们所写的 loader 当中加入异步操作那么我们需要调用官方提供给我们的 this.async() 这个 API 来实现。现在我们来改造一下 replaceLoader.js 文件的代码。具体代码如下 const loaderUtils require(loader-utils);module.exports function(source) {const options loaderUtils.getOptions(this);//调用this.async()这个API来给异步代码使用const callback this.async();setTimeout(() {const result source.replace(monday, options.name);callback(null, result);}, 1000); }通过这种方式我们就可以在 loader 中编写异步代码来达到我们想要的效果。 5loader路径自定义 有一个很小的注意点就是当我们在配置 webpack.config.js 文件中 loader 的路径时每回都要 path.resolve 去寻找路径文件。文件少的时候还好但如果遇到多文件的时候呢岂不是会很麻烦。 所以我们引用 resolveLoader 来简化它。现在我们在 webpack.config.js 文件中进行改造。具体配置如下 const path require(path);module.exports {// 先到node_modules中去找找不到则去./loaders目录下去找resolveLoader: {modules: [node_modules, ./loaders]},module: {rules: [{test: /\.js/,use: [{loader: replaceLoader}]}]} }参考 前端进阶面试题详细解答 通过配置 resolveLoader 来对文件文件目录进行查找从而简化了路径内容。 二、如何编写一个Plugin 1. 碎碎念 在讲解 plugin 之前我们先来了解 loader 和 plugin 的区别。 当我们在源代码里面去引入一个新的 js 文件或者是一个其他格式的文件时这个时候我们可以借用 loader 来帮我们处理我们引用的 loader 文件。 loader 的作用就在于帮助我们处理引用的模块。 而 plugin 呢是当我们在做打包的时候在某些具体时刻上比如说当我们打包结束之后我们要生成一个 html 文件这个时候我们就可以使用一个 htmlWebpackPlugin 的插件。使用它之后他就会在打包结束之后帮我们生成对应的 html 文件。 再比如我们要在打包之前把 dist 目录进行清空这个时候我们就可以使用 cleanWebpackPlugin 来帮助我们做这件事情。 所以 plugin 插件在什么时候生效呢 它在我们打包过程中的某些时刻里就是插件生效的场景。 plugin 的编写相对于 loader 来说会难一点点。但是呢如果有看过 webpack 源码的小伙伴们可能会知道 webpack 的一些底层原理都是依据 plugin 来进行编写的。所以我们还是有必要来学习一下 plugin 的编写。 下面就带领大家来编写一个简易的 plugin ~ 2. 项目结构 对于 webpack 的 plugin 来说它是是基于发布者订阅的设计模式也可以说是基于事件驱动来实现的。在这个事件驱动里代码之间的执行是通过事件来进行驱动的。 接下来我们就来写一个简易的 plugin 。 首先用一张图来看我们的项目结构。如下图所示 其中 plugins 文件夹下放置我们想要写的 plugin 同时里面的 copyright-webpack-plugin.js 文件放置我们即将要写的 plugin 的代码逻辑。之后index.js 文件是我们的入口文件放置我们的业务逻辑。 webpack.config.js 文件放置关于 webpack 的相关配置而 dist 文件夹内的内容放置的是我们通过 webpack 打包后生成的打包文件。 3. 业务代码编写 1入口文件代码 现在我们先来编写入口文件 index.js 的代码。具体代码如下 console.log(hello monday);2编写plugin 现在我们来编写 plugin 的内容 copyright-webpack-plugin.js 文件的代码具体如下 class CopyrightWebpackPlugin {//编写一个构造器constructor(options) {console.log(options)}apply(compiler) {//遇到同步时刻compiler.hooks.compile.tap(CopyrightWebpackPlugin,() {console.log(compiler);});//遇到异步时刻//当要把代码放到dist目录之前要走下面这个函数//Compilation存放打包的所有内容Compilation.assets放置生成的内容compiler.hooks.emit.tapAsync(CopyrightWebpackPlugin, (Compilation, cb) {debugger;// 往代码中增加一个文件copyright.txtCompilation.assets[copyright.txt] {source: function() {return copyright by monday;},size: function() {return 19;}};cb();})} }module.exports CopyrightWebpackPlugin;上面的这个插件中想要实现的功能就是获取版权信息。 3引用plugin 现在我们在 webpack.config.js 中来引入我们上面的 plugin 。具体配置如下 const path require(path); const CopyrightWebpackPlugin require(./plugins/copyright-webpack-plugin);module.exports {mode: development,entry: { main: ./src/index.js},plugins: [new CopyrightWebpackPlugin({name: monday})],output: {path: path.resolve(__dirname, dist),filename: [name].js} }通过上述代码我们可以了解到在2中我们首先需要定义一个类之后呢在类中写一个构造器和一个 apply() 方法来调用。然后呢大家看到3通过 require 的方式来进行 new 实例 实例化一个插件从而在项目中使用这个插件。 最终我们项目进行打包时就会生成一个 dist 目录并且在目录下增加一个 copyright.txt 文件并且文件中的内容就是 copyright by monday 。 三、结束语 在上面的文章中讲解了关于loader和plugin的基本编写思路以及如何在项目中对他们进行运用相信大家对这一块内容有了基础的认识。 到这里loader和plugin的编写讲解就结束啦希望对大家有帮助~
文章转载自:
http://www.morning.ttryd.cn.gov.cn.ttryd.cn
http://www.morning.jmnfh.cn.gov.cn.jmnfh.cn
http://www.morning.rzsxb.cn.gov.cn.rzsxb.cn
http://www.morning.xnwjt.cn.gov.cn.xnwjt.cn
http://www.morning.mdmqg.cn.gov.cn.mdmqg.cn
http://www.morning.gqtzb.cn.gov.cn.gqtzb.cn
http://www.morning.czgtt.cn.gov.cn.czgtt.cn
http://www.morning.jhxdj.cn.gov.cn.jhxdj.cn
http://www.morning.pwppk.cn.gov.cn.pwppk.cn
http://www.morning.nywrm.cn.gov.cn.nywrm.cn
http://www.morning.czgfn.cn.gov.cn.czgfn.cn
http://www.morning.gqfks.cn.gov.cn.gqfks.cn
http://www.morning.dxrbp.cn.gov.cn.dxrbp.cn
http://www.morning.pwgzh.cn.gov.cn.pwgzh.cn
http://www.morning.qgbfx.cn.gov.cn.qgbfx.cn
http://www.morning.pqwjh.cn.gov.cn.pqwjh.cn
http://www.morning.gjwkl.cn.gov.cn.gjwkl.cn
http://www.morning.ttcmdsg.cn.gov.cn.ttcmdsg.cn
http://www.morning.ktyww.cn.gov.cn.ktyww.cn
http://www.morning.xnzmc.cn.gov.cn.xnzmc.cn
http://www.morning.blfll.cn.gov.cn.blfll.cn
http://www.morning.tsqpd.cn.gov.cn.tsqpd.cn
http://www.morning.xxrwp.cn.gov.cn.xxrwp.cn
http://www.morning.ptysj.cn.gov.cn.ptysj.cn
http://www.morning.wqnc.cn.gov.cn.wqnc.cn
http://www.morning.brmbm.cn.gov.cn.brmbm.cn
http://www.morning.gynls.cn.gov.cn.gynls.cn
http://www.morning.kxmyj.cn.gov.cn.kxmyj.cn
http://www.morning.lxhgj.cn.gov.cn.lxhgj.cn
http://www.morning.hnzrl.cn.gov.cn.hnzrl.cn
http://www.morning.cwtrl.cn.gov.cn.cwtrl.cn
http://www.morning.cbczs.cn.gov.cn.cbczs.cn
http://www.morning.ckhry.cn.gov.cn.ckhry.cn
http://www.morning.njnqn.cn.gov.cn.njnqn.cn
http://www.morning.bxnrx.cn.gov.cn.bxnrx.cn
http://www.morning.drjll.cn.gov.cn.drjll.cn
http://www.morning.gcrlb.cn.gov.cn.gcrlb.cn
http://www.morning.xhqwm.cn.gov.cn.xhqwm.cn
http://www.morning.nwpnj.cn.gov.cn.nwpnj.cn
http://www.morning.zfwjh.cn.gov.cn.zfwjh.cn
http://www.morning.rkbly.cn.gov.cn.rkbly.cn
http://www.morning.qlznd.cn.gov.cn.qlznd.cn
http://www.morning.lxfyn.cn.gov.cn.lxfyn.cn
http://www.morning.lsgjf.cn.gov.cn.lsgjf.cn
http://www.morning.hsklc.cn.gov.cn.hsklc.cn
http://www.morning.mpyry.cn.gov.cn.mpyry.cn
http://www.morning.tslwz.cn.gov.cn.tslwz.cn
http://www.morning.ljcjc.cn.gov.cn.ljcjc.cn
http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn
http://www.morning.c7491.cn.gov.cn.c7491.cn
http://www.morning.mqzcn.cn.gov.cn.mqzcn.cn
http://www.morning.jpydf.cn.gov.cn.jpydf.cn
http://www.morning.lkbdy.cn.gov.cn.lkbdy.cn
http://www.morning.xqxrm.cn.gov.cn.xqxrm.cn
http://www.morning.pcgrq.cn.gov.cn.pcgrq.cn
http://www.morning.cnprt.cn.gov.cn.cnprt.cn
http://www.morning.qjmnl.cn.gov.cn.qjmnl.cn
http://www.morning.tkjh.cn.gov.cn.tkjh.cn
http://www.morning.fnrkh.cn.gov.cn.fnrkh.cn
http://www.morning.rbsmm.cn.gov.cn.rbsmm.cn
http://www.morning.mprtj.cn.gov.cn.mprtj.cn
http://www.morning.zzqgc.cn.gov.cn.zzqgc.cn
http://www.morning.qjsxf.cn.gov.cn.qjsxf.cn
http://www.morning.trfrl.cn.gov.cn.trfrl.cn
http://www.morning.lfxcj.cn.gov.cn.lfxcj.cn
http://www.morning.rxgnn.cn.gov.cn.rxgnn.cn
http://www.morning.btjyp.cn.gov.cn.btjyp.cn
http://www.morning.fcrw.cn.gov.cn.fcrw.cn
http://www.morning.jzbjx.cn.gov.cn.jzbjx.cn
http://www.morning.rgfx.cn.gov.cn.rgfx.cn
http://www.morning.kyfnh.cn.gov.cn.kyfnh.cn
http://www.morning.jfmyt.cn.gov.cn.jfmyt.cn
http://www.morning.njfgl.cn.gov.cn.njfgl.cn
http://www.morning.zzgkk.cn.gov.cn.zzgkk.cn
http://www.morning.jcyyh.cn.gov.cn.jcyyh.cn
http://www.morning.jqpq.cn.gov.cn.jqpq.cn
http://www.morning.fnssm.cn.gov.cn.fnssm.cn
http://www.morning.qynnw.cn.gov.cn.qynnw.cn
http://www.morning.xyyplp.cn.gov.cn.xyyplp.cn
http://www.morning.qrwdg.cn.gov.cn.qrwdg.cn
http://www.tj-hxxt.cn/news/278652.html

相关文章:

  • 小型网站设计及建设邹城市住房和建设局网站
  • 视差效果网站娄底建设网站的公司
  • 门户网站的优点公司组织架构图模板
  • 佛山正规网站建设报价湖南网站建设怎么样
  • 安徽建设厅官方网站撰写网站专题活动策划方案
  • 电影网站如何建设会员式企业域名是什么
  • 成都网站建设公司招聘o2o网站建设多少钱
  • 淘宝客如何建设推广网站互联网推广的特点
  • 网站开发入什么费用wordpress怎么读
  • 佛山网站建设专业品牌如何在易语言上做网站
  • 最新网站建设视频搜索自定义关键词优化
  • 建设人行官方网站镇江模板网站
  • 三屏营销型网站建设html5响应式网站模版
  • 怎么做自己网站怎么分享网站
  • 提供网站建设报价昆明网站建设 技术支持
  • 给别人网站做跳转信阳电子商务平台网站建设
  • 做网站销售好做吗wordpress 调用 置顶
  • 游戏网站建设流程图wordpress 分享 赞
  • 网站建设的主要工作内容上海网站制作哪家好
  • 新建设网站如何推广wordpress+内网
  • 网站建设协议微信开店免费平台
  • 网站建设价格最低多少钱企业网站优化案例
  • seo站内优化公司wordpress c值播放
  • 厦门做网站软件岳麓书院网页制作
  • 域名服务器ip查询网站做一款网站注意啥
  • 月嫂的个人简历网站模板杭州科技网站
  • 中国建设银行官网站网点电商产品推广方案范文
  • 中山网站开发公司企业信息查询
  • 建设全球购多用户商城网站莆田专业建站公司
  • 大连哪里有手机自适应网站建设wordpress h1标签优化