如何基于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 陷阱 window全局对象

    Javascript 陷阱 window全局对象

    ff和ie6下都是同样的运行结果,看来不是bug,那究竟是为什么呢? 注意到:对象方法访问其对象的属性时|必须|加以this.(和java不一样).
    2008-11-11
  • 微信小程序实现幸运大转盘功能的示例代码

    微信小程序实现幸运大转盘功能的示例代码

    这篇文章主要介绍了如何在微信小程序中实现幸运大转盘功能,参与用户点击抽奖便可抽取轮盘的奖品,感兴趣的小伙伴可以跟随小编一起动手试一试
    2022-03-03
  • Bootstrap3 datetimepicker控件使用实例

    Bootstrap3 datetimepicker控件使用实例

    这篇文章主要为大家详细介绍了Bootstrap3 datetimepicker控件使用实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • javascript获取form里的表单元素的示例代码

    javascript获取form里的表单元素的示例代码

    本篇文章主要是对javascript获取form里的表单元素的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • ES6中Object.assign方法使用详解

    ES6中Object.assign方法使用详解

    这篇文章主要给大家介绍了关于ES6中Object.assign方法使用的相关资料,Object.assign可以用来处理数组,但是会把数组视为对象,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • 鼠标拖拽移动子窗体的JS实现

    鼠标拖拽移动子窗体的JS实现

    这篇文章主要介绍了鼠标拖拽移动子窗体的JS实现,需要的朋友可以参考下
    2014-02-02
  • 你可能不知道的JSON.stringify()详解

    你可能不知道的JSON.stringify()详解

    老司机们,你知道JSON.stringify还有第二个和第三个可选参数吗?它们是什么呢?是不是感到不可思议?下面这篇文章就来给大家介绍了一些你可能不知道的JSON.stringify的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-08-08
  • JS二分查找算法详解

    JS二分查找算法详解

    这篇文章主要为大家详细介绍了JS二分查找算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 微信小程序实现顶部选项卡(swiper)

    微信小程序实现顶部选项卡(swiper)

    这篇文章主要为大家详细介绍了微信小程序实现顶部选项卡效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • JavaScript的Set数据结构详解

    JavaScript的Set数据结构详解

    这篇文章主要为大家介绍了JavaScript的Set数据结构,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01

最新评论