如何基于webpack创建plugin并发布npm包

 更新时间:2024年07月15日 10:14:49   作者:婷宝_知萌  
webpack 插件是一个具有 apply 方法的 JavaScript 对象,apply 方法会被 webpack compiler 调用,并且在 整个编译生命周期都可以访问 compiler 对象,这篇文章主要介绍了基于webpack创建plugin并发布npm包,需要的朋友可以参考下

webpack

1. 什么是webpack

webpack是一个模块化打包工具,

  • 可以将零散的js文件打包到一个js文件中
  • 可以使用loader对对模块的源代码进行转换 再打包
  • 可以支持载入任何类型的文件
  • 有代码拆解能力

2.webpack中有两个重要的概念

loader: loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中。
plugin:插件目的在于解决 loader 无法实现的其他事

webpack 插件是一个具有 apply 方法的 JavaScript 对象。apply 方法会被 webpack compiler 调用,并且在 整个 编译生命周期都可以访问 compiler 对象。

3. 为什么基于webpack发布npm

利用了webpack的打包功能,将多个模块和依赖项打包成一个或多个bundle同时还有webpack中的
source-map 映射源文件····

npm

1. 什么是npm

npm 是一个包管理工具,允许用户从npm服务器上下载别人编写的第三方包到本地使用,允许自己编写的包供别人使用
npm常见的安装命令

npm i 包的名字@<版本号>  // 版本号可省略

安装完成的包会在node_modules 目录下

2.创建包的过程

npm init --yes 初始化一个 package.json

package.json 用于定义包的属性常见的有
version 包的版本号
description 包的描述
script 自动化脚本语言…

npm install webpack webpack-cli --save

【 webpack 是 webpack 的核心模块 webpack-cli 是 Webpack 的 CLI 程序,用来在命令行中调用 webpack】

npx webpack --version
-npx webpack进行打包构建 打包之后的文件在 dist 文件夹下

3.webpack的相关配置

上面的代码中我们安装了webpack webpack cli 说明我们是基于webpack进行的包的创建
下面我们进行webpack的相关配置

webpack的相关概念

  • mode : 选择打包的环境
  • entry:入口
  • output:出口
  • loader: 用于对模块的源代码进行转换
  • plugin: 用于解决 loader 无法解决的事情 –

4.基于webpack中的apply实现插件并暴露

webpack官网 重点
官网中有说到

//webpack 插件是一个具有 apply 方法的 JavaScript 对象。apply 方法会被 webpack compiler 调用,并且在 整个 编译生命周期都可以访问 compiler 对象
//ConsoleLogOnBuildWebpackPlugin.js  插件
onst pluginName = 'ConsoleLogOnBuildWebpackPlugin';
class ConsoleLogOnBuildWebpackPlugin {
  apply(compiler) {
    compiler.hooks.run.tap(pluginName, (compilation) => {
      console.log('webpack 构建正在启动!');
    });
  }
}
module.exports = ConsoleLogOnBuildWebpackPlugin;

5.webpack.config.js中的相关配置

// webpack.config.js 配置
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); // 访问内置的插件
const path = require('path');
module.exports = {
  entry: './path/to/my/entry/file.js',
  output: {
    filename: 'my-first-webpack.bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        use: 'babel-loader',
      },
    ],
  },
  plugins: [
    new webpack.ProgressPlugin(),
    new HtmlWebpackPlugin({ template: './src/index.html' }),
  ],
};

三 发布包

首先需要注册npm npm官网
在对应的插件目录下登录:执行npm login

npm login

登录npm账号,登录前先检查一下npm源,很多人开发是已将把npm 源换成了淘宝镜像或者自己公司内部的,但是发布需要npm本身的源:https://registry.npmjs.org/

执行成功之后会给你注册的邮箱发布一个一次性的秘密输入之后登录

显示Logged… 表示登录成功
登录成功之后执行 npm puiblish实现发布

npm puiblish // 发布包

显示下面表示发布成功

// 报错
PS E:\practice-once-a-day\bundlesize-webpack-plugin> npm publish
npm notice Publishing to https://registry.npmjs.org with tag latest and default access
npm ERR! code E403
npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/08-webpack-npm - 08-webpack-npm cannot be republished until 24 hours have passed.
npm ERR! 403 In most cases, you or one of your dependencies are requesting
npm ERR! 403 a package version that is forbidden by your security policy, or
npm ERR! 403 on a server you do not have access to.
npm ERR! A complete log of this run can be found in: C:\Users\11\AppData\Local\npm-cache\_logs\2024-07-11T12_27_54_985Z-debug-0.log

原因:

等待 24 小时:如果你之前已经发布了 08-webpack-npm 的 1.0.0 版本,你需要等待 24 小时后才能再次发布同一版本。
发布新版本:如果你想更新 08-webpack-npm 包,考虑更改版本号,遵循语义化版本控制规则,例如发布 1.0.1 或 1.1.0。

发布packege包到npm

项目根路径输入 npm login 后按要求填写账号密码,然后输入 npm publish 发布包。

其他

到此这篇关于基于webpack创建plugin并发布npm包的文章就介绍到这了,更多相关webpack创建plugin发布npm包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript之Object类型介绍

    JavaScript之Object类型介绍

    这篇文章主要介绍了JavaScript之Object类型介绍,本文讲解了创建Object类型的两种方法以及访问Object类型的方法,需要的朋友可以参考下
    2015-04-04
  • js 弹出菜单/窗口效果

    js 弹出菜单/窗口效果

    想象一下,你把一个重要内容放在一个弹出窗口,又不聚集到这个窗口。让使用屏幕阅读器的同学情何以堪,只有当他们 tab 到这页面结束,还继续 tab,才可能找到这个弹窗
    2011-10-10
  • 详解JS中定时器setInterval和setTImeout的this指向问题

    详解JS中定时器setInterval和setTImeout的this指向问题

    在js中setTimeout和setInterval都是用来定时的一个功能,下面这篇文章主要给介绍了JS中setInterval和setTImeout的this指向问题,文中通过示例介绍的很详细,有需要的朋友可以参考借鉴,一起来看看吧。
    2017-01-01
  • 教你使用javascript简单写一个页面模板引擎

    教你使用javascript简单写一个页面模板引擎

    不知道你有木有听说过一个基于Javascript的Web页面预处理器,叫做AbsurdJS。只是打算写一个CSS的预处理器,后来扩展到了CSS和HTML,可以用来把Javascript代码转成CSS和HTML代码。当然,由于可以生成HTML代码,你也可以把它当成一个模板引擎,用于在标记语言中填充数据。
    2015-05-05
  • javascript 设计模式之组合模式原理与应用详解

    javascript 设计模式之组合模式原理与应用详解

    这篇文章主要介绍了javascript 设计模式之组合模式原理与应用,结合实例形式分析了javascript组合模式基本概念、原理、应用场景及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • JavaScript将数字转换成大写中文的方法

    JavaScript将数字转换成大写中文的方法

    这篇文章主要介绍了JavaScript将数字转换成大写中文的方法,涉及javascript字符串及匹配的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • js实现幻灯片轮播图

    js实现幻灯片轮播图

    这篇文章主要为大家详细介绍了js实现幻灯片轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • 微信小程序嵌入H5页面(web-view)的方法详解

    微信小程序嵌入H5页面(web-view)的方法详解

    使用<web-view>标签能在小程序中打开外部网页,但是要打开的网页的域名必须跟小程序的业务域名(业务域名可以在小程序的后台管理界面添加)一致,否则在真机上是打不开的,下面这篇文章主要给大家介绍了关于微信小程序嵌入H5页面(web-view)的相关资料,需要的朋友可以参考下
    2022-09-09
  • js如何实现小程序wx.arrayBufferToBase64方法实例

    js如何实现小程序wx.arrayBufferToBase64方法实例

    这篇文章主要给大家介绍了关于js如何实现小程序wx.arrayBufferToBase64方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • 微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)

    微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)

    这篇文章主要介绍了微信小程序MUI导航栏透明渐变功能,结合实例形式分析了通过改变rgba的a值实现透明度渐变功能的相关操作技巧,需要的朋友可以参考下
    2019-01-01

最新评论