基于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 发布包。

其他

在这里插入图片描述

相关推荐

  1. npm创建发布无作用域的公共

    2024-07-12 05:46:01       26 阅读
  2. 如何发布npm

    2024-07-12 05:46:01       48 阅读
  3. 如何发布NPM

    2024-07-12 05:46:01       43 阅读
  4. npm发布

    2024-07-12 05:46:01       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 05:46:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 05:46:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 05:46:01       57 阅读
  4. Python语言-面向对象

    2024-07-12 05:46:01       68 阅读

热门阅读

  1. python常用命令

    2024-07-12 05:46:01       22 阅读
  2. 微信小程序中的数据通信

    2024-07-12 05:46:01       27 阅读
  3. TypeScript中的交叉类型

    2024-07-12 05:46:01       28 阅读
  4. CUDA编程 - asyncAPI 学习记录

    2024-07-12 05:46:01       24 阅读
  5. Postman脚本炼金术:高级数据处理的秘籍

    2024-07-12 05:46:01       25 阅读
  6. 使用SOAP与TrinityCore交互(待定)

    2024-07-12 05:46:01       27 阅读
  7. 编程语言如何和计算机交互:深入解析交互机制

    2024-07-12 05:46:01       25 阅读
  8. LLM_入门指南(零基础搭建大模型)

    2024-07-12 05:46:01       25 阅读
  9. 爬虫学习前记----Python

    2024-07-12 05:46:01       26 阅读