如何基于webpack創(chuàng)建plugin并發(fā)布npm包
webpack
1. 什么是webpack
webpack是一個模塊化打包工具,
- 可以將零散的js文件打包到一個js文件中
- 可以使用loader對對模塊的源代碼進行轉(zhuǎn)換 再打包
- 可以支持載入任何類型的文件
- 有代碼拆解能力

2.webpack中有兩個重要的概念
loader: loader 讓 webpack 能夠去處理其他類型的文件,并將它們轉(zhuǎn)換為有效 模塊,以供應(yīng)用程序使用,以及被添加到依賴圖中。plugin:插件目的在于解決 loader 無法實現(xiàn)的其他事
webpack 插件是一個具有 apply 方法的 JavaScript 對象。apply 方法會被 webpack compiler 調(diào)用,并且在 整個 編譯生命周期都可以訪問 compiler 對象。
3. 為什么基于webpack發(fā)布npm
利用了webpack的打包功能,將多個模塊和依賴項打包成一個或多個bundle同時還有webpack中的source-map 映射源文件····
npm
1. 什么是npm
npm 是一個包管理工具,允許用戶從npm服務(wù)器上下載別人編寫的第三方包到本地使用,允許自己編寫的包供別人使用
npm常見的安裝命令
npm i 包的名字@<版本號> // 版本號可省略
安裝完成的包會在node_modules 目錄下
2.創(chuàng)建包的過程
① npm init --yes 初始化一個 package.json
package.json 用于定義包的屬性常見的有
version 包的版本號
description 包的描述
script 自動化腳本語言…
npm install webpack webpack-cli --save
【 webpack 是 webpack 的核心模塊 webpack-cli 是 Webpack 的 CLI 程序,用來在命令行中調(diào)用 webpack】
npx webpack --version
-npx webpack進行打包構(gòu)建 打包之后的文件在 dist 文件夾下
3.webpack的相關(guān)配置
上面的代碼中我們安裝了webpack 和 webpack cli 說明我們是基于webpack進行的包的創(chuàng)建
下面我們進行webpack的相關(guān)配置
webpack的相關(guān)概念
- mode : 選擇打包的環(huán)境
- entry:入口
- output:出口
- loader: 用于對模塊的源代碼進行轉(zhuǎn)換
- plugin: 用于解決 loader 無法解決的事情 –
4.基于webpack中的apply實現(xiàn)插件并暴露
webpack官網(wǎng) 重點
官網(wǎng)中有說到
//webpack 插件是一個具有 apply 方法的 JavaScript 對象。apply 方法會被 webpack compiler 調(diào)用,并且在 整個 編譯生命周期都可以訪問 compiler 對象
//ConsoleLogOnBuildWebpackPlugin.js 插件
onst pluginName = 'ConsoleLogOnBuildWebpackPlugin';
class ConsoleLogOnBuildWebpackPlugin {
apply(compiler) {
compiler.hooks.run.tap(pluginName, (compilation) => {
console.log('webpack 構(gòu)建正在啟動!');
});
}
}
module.exports = ConsoleLogOnBuildWebpackPlugin;5.webpack.config.js中的相關(guān)配置
// webpack.config.js 配置
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); // 訪問內(nèi)置的插件
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' }),
],
};三 發(fā)布包
首先需要注冊npm npm官網(wǎng)
在對應(yīng)的插件目錄下登錄:執(zhí)行npm login
npm login
登錄npm賬號,登錄前先檢查一下npm源,很多人開發(fā)是已將把npm 源換成了淘寶鏡像或者自己公司內(nèi)部的,但是發(fā)布需要npm本身的源:https://registry.npmjs.org/
執(zhí)行成功之后會給你注冊的郵箱發(fā)布一個一次性的秘密輸入之后登錄


顯示Logged… 表示登錄成功
登錄成功之后執(zhí)行 npm puiblish實現(xiàn)發(fā)布
npm puiblish // 發(fā)布包
顯示下面表示發(fā)布成功

// 報錯
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 小時:如果你之前已經(jīng)發(fā)布了 08-webpack-npm 的 1.0.0 版本,你需要等待 24 小時后才能再次發(fā)布同一版本。
發(fā)布新版本:如果你想更新 08-webpack-npm 包,考慮更改版本號,遵循語義化版本控制規(guī)則,例如發(fā)布 1.0.1 或 1.1.0。
發(fā)布packege包到npm
項目根路徑輸入 npm login 后按要求填寫賬號密碼,然后輸入 npm publish 發(fā)布包。
其他

到此這篇關(guān)于基于webpack創(chuàng)建plugin并發(fā)布npm包的文章就介紹到這了,更多相關(guān)webpack創(chuàng)建plugin發(fā)布npm包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue-cli5.0?webpack?采用?copy-webpack-plugin?打包復(fù)制文件的方法
- vue 解決uglifyjs-webpack-plugin打包出現(xiàn)報錯的問題
- html-webpack-plugin修改頁面的title的方法
- 深入webpack打包原理及l(fā)oader和plugin的實現(xiàn)
- webpack DllPlugin xxx is not defined解決辦法
- 用npm安裝vue和vue-cli,并使用webpack創(chuàng)建項目的方法
- vue項目webpack中Npm傳遞參數(shù)配置不同域名接口
- 詳解node.js中的npm和webpack配置方法
相關(guān)文章
JavaScript利用Bookmarklet給網(wǎng)頁臨時掛載一個圖片調(diào)試面板
在前端開發(fā)中,我們經(jīng)常需要分析頁面中的資源情況,比如頁面實際加載了哪些圖片,不同分辨率資源的分布等等,這些事情當(dāng)然可以通過 DevTools 完成,但在某些場景下效率并不高,所以本文介紹了JavaScript利用Bookmarklet給網(wǎng)頁臨時掛載一個圖片調(diào)試面板2026-04-04
JavaScript中實現(xiàn)PHP的打亂數(shù)組函數(shù)shuffle實例
這篇文章主要介紹了JavaScript中實現(xiàn)PHP的打亂數(shù)組函數(shù)shuffle實例,本文用2種方法實現(xiàn)了類似PHP的打亂數(shù)組函數(shù)shuffle函數(shù),需要的朋友可以參考下2014-10-10
javascript 讀取xml,寫入xml 實現(xiàn)代碼
javascript xml讀取,寫入xml 實現(xiàn)代碼2009-07-07
談?wù)凧avaScript自定義回調(diào)函數(shù)
使用Jquery的時候發(fā)現(xiàn)它里面的很多方法都提供回調(diào)函數(shù),接下來通過本篇文章給大家介紹js自定義回調(diào)函數(shù),需要的朋友參考下2015-10-10
JavaScript實現(xiàn)省市縣三級級聯(lián)特效
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)省市縣三級級聯(lián)特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05

