基于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常见的安装命令

javascript 复制代码
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官网 重点

官网中有说到

javascript 复制代码
//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中的相关配置

javascript 复制代码
// 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

javascript 复制代码
npm login

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

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

显示Logged... 表示登录成功

登录成功之后执行 npm puiblish实现发布

javascript 复制代码
npm puiblish // 发布包

显示下面表示发布成功

javascript 复制代码
// 报错
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 发布包。

其他

相关推荐
子兮曰2 小时前
🚀前端依赖配置避坑指南:深度解析package.json中devDependencies的常见误解
前端·javascript·npm
汤姆Tom1 天前
Node.js 版本管理、NPM 命令、与 NVM 完全指南
前端·npm·node.js
小Wang1 天前
npm私有库创建(docker+verdaccio)
前端·docker·npm
libraG2 天前
Jenkins打包问题
前端·npm·jenkins
光影少年2 天前
webpack打包优化
webpack·掘金·金石计划·前端工程化
你是一个铁憨憨3 天前
ArcGIS定向影像(1)——非传统影像轻量级解决方案
arcgis·gis·影像·定向影像
QQ3596773453 天前
ArcGIS Pro实现基于 Excel 表格批量创建标准地理数据库(GDB)——高效数据库建库解决方案
数据库·arcgis·excel
人工智能训练师4 天前
Ubuntu22.04如何安装新版本的Node.js和npm
linux·运维·前端·人工智能·ubuntu·npm·node.js
Seveny074 天前
pnpm相对于npm,yarn的优势
前端·npm·node.js
huangql5204 天前
npm 发布流程——从创建组件到发布到 npm 仓库
前端·npm·node.js