如何基于webpack創(chuàng)建plugin并發(fā)布npm包
webpack
1. 什么是webpack
webpack是一個(gè)模塊化打包工具,
- 可以將零散的js文件打包到一個(gè)js文件中
- 可以使用loader對(duì)對(duì)模塊的源代碼進(jìn)行轉(zhuǎn)換 再打包
- 可以支持載入任何類(lèi)型的文件
- 有代碼拆解能力
2.webpack中有兩個(gè)重要的概念
loader
: loader 讓 webpack 能夠去處理其他類(lèi)型的文件,并將它們轉(zhuǎn)換為有效 模塊,以供應(yīng)用程序使用,以及被添加到依賴(lài)圖中。plugin
:插件目的在于解決 loader 無(wú)法實(shí)現(xiàn)的其他事
webpack 插件是一個(gè)具有 apply 方法的 JavaScript 對(duì)象。apply 方法會(huì)被 webpack compiler 調(diào)用,并且在 整個(gè) 編譯生命周期都可以訪問(wèn) compiler 對(duì)象。
3. 為什么基于webpack發(fā)布npm
利用了webpack的打包功能,將多個(gè)模塊和依賴(lài)項(xiàng)打包成一個(gè)或多個(gè)bundle同時(shí)還有webpack中的source-map
映射源文件····
npm
1. 什么是npm
npm 是一個(gè)包管理工具,允許用戶(hù)從npm服務(wù)器上下載別人編寫(xiě)的第三方包到本地使用,允許自己編寫(xiě)的包供別人使用
npm常見(jiàn)的安裝命令
npm i 包的名字@<版本號(hào)> // 版本號(hào)可省略
安裝完成的包會(huì)在node_modules 目錄下
2.創(chuàng)建包的過(guò)程
① npm init --yes
初始化一個(gè) package.json
package.json 用于定義包的屬性常見(jiàn)的有
version 包的版本號(hào)
description 包的描述
script 自動(dòng)化腳本語(yǔ)言…
npm install webpack webpack-cli --save
【 webpack 是 webpack 的核心模塊 webpack-cli 是 Webpack 的 CLI 程序,用來(lái)在命令行中調(diào)用 webpack】
npx webpack --version
-npx webpack
進(jìn)行打包構(gòu)建 打包之后的文件在 dist 文件夾下
3.webpack的相關(guān)配置
上面的代碼中我們安裝了webpack
和 webpack cli
說(shuō)明我們是基于webpack進(jìn)行的包的創(chuàng)建
下面我們進(jìn)行webpack的相關(guān)配置
webpack的相關(guān)概念
- mode : 選擇打包的環(huán)境
- entry:入口
- output:出口
- loader: 用于對(duì)模塊的源代碼進(jìn)行轉(zhuǎn)換
- plugin: 用于解決 loader 無(wú)法解決的事情 –
4.基于webpack中的apply實(shí)現(xiàn)插件并暴露
webpack官網(wǎng) 重點(diǎn)
官網(wǎng)中有說(shuō)到
//webpack 插件是一個(gè)具有 apply 方法的 JavaScript 對(duì)象。apply 方法會(huì)被 webpack compiler 調(diào)用,并且在 整個(gè) 編譯生命周期都可以訪問(wèn) compiler 對(duì)象 //ConsoleLogOnBuildWebpackPlugin.js 插件 onst pluginName = 'ConsoleLogOnBuildWebpackPlugin'; class ConsoleLogOnBuildWebpackPlugin { apply(compiler) { compiler.hooks.run.tap(pluginName, (compilation) => { console.log('webpack 構(gòu)建正在啟動(dòng)!'); }); } } module.exports = ConsoleLogOnBuildWebpackPlugin;
5.webpack.config.js中的相關(guān)配置
// webpack.config.js 配置 const HtmlWebpackPlugin = require('html-webpack-plugin'); const webpack = require('webpack'); // 訪問(wèn)內(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ā)布包
首先需要注冊(cè)npm npm官網(wǎng)
在對(duì)應(yīng)的插件目錄下登錄:執(zhí)行npm login
npm login
登錄npm賬號(hào),登錄前先檢查一下npm源,很多人開(kāi)發(fā)是已將把npm 源換成了淘寶鏡像或者自己公司內(nèi)部的,但是發(fā)布需要npm本身的源:https://registry.npmjs.org/
執(zhí)行成功之后會(huì)給你注冊(cè)的郵箱發(fā)布一個(gè)一次性的秘密輸入之后登錄
顯示Logged… 表示登錄成功
登錄成功之后執(zhí)行 npm puiblish
實(shí)現(xiàn)發(fā)布
npm puiblish // 發(fā)布包
顯示下面表示發(fā)布成功
// 報(bào)錯(cuò)
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 小時(shí):如果你之前已經(jīng)發(fā)布了 08-webpack-npm 的 1.0.0 版本,你需要等待 24 小時(shí)后才能再次發(fā)布同一版本。
發(fā)布新版本:如果你想更新 08-webpack-npm 包,考慮更改版本號(hào),遵循語(yǔ)義化版本控制規(guī)則,例如發(fā)布 1.0.1 或 1.1.0。
發(fā)布packege包到npm
項(xiàng)目根路徑輸入 npm login 后按要求填寫(xiě)賬號(hào)密碼,然后輸入 npm publish 發(fā)布包。
其他
到此這篇關(guān)于基于webpack創(chuàng)建plugin并發(fā)布npm包的文章就介紹到這了,更多相關(guān)webpack創(chuàng)建plugin發(fā)布npm包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue-cli5.0?webpack?采用?copy-webpack-plugin?打包復(fù)制文件的方法
- vue 解決uglifyjs-webpack-plugin打包出現(xiàn)報(bào)錯(cuò)的問(wèn)題
- html-webpack-plugin修改頁(yè)面的title的方法
- 深入webpack打包原理及l(fā)oader和plugin的實(shí)現(xiàn)
- webpack DllPlugin xxx is not defined解決辦法
- 用npm安裝vue和vue-cli,并使用webpack創(chuàng)建項(xiàng)目的方法
- vue項(xiàng)目webpack中Npm傳遞參數(shù)配置不同域名接口
- 詳解node.js中的npm和webpack配置方法
相關(guān)文章
詳解JS中定時(shí)器setInterval和setTImeout的this指向問(wèn)題
在js中setTimeout和setInterval都是用來(lái)定時(shí)的一個(gè)功能,下面這篇文章主要給介紹了JS中setInterval和setTImeout的this指向問(wèn)題,文中通過(guò)示例介紹的很詳細(xì),有需要的朋友可以參考借鑒,一起來(lái)看看吧。2017-01-01教你使用javascript簡(jiǎn)單寫(xiě)一個(gè)頁(yè)面模板引擎
不知道你有木有聽(tīng)說(shuō)過(guò)一個(gè)基于Javascript的Web頁(yè)面預(yù)處理器,叫做AbsurdJS。只是打算寫(xiě)一個(gè)CSS的預(yù)處理器,后來(lái)擴(kuò)展到了CSS和HTML,可以用來(lái)把Javascript代碼轉(zhuǎn)成CSS和HTML代碼。當(dāng)然,由于可以生成HTML代碼,你也可以把它當(dāng)成一個(gè)模板引擎,用于在標(biāo)記語(yǔ)言中填充數(shù)據(jù)。2015-05-05javascript 設(shè)計(jì)模式之組合模式原理與應(yīng)用詳解
這篇文章主要介紹了javascript 設(shè)計(jì)模式之組合模式原理與應(yīng)用,結(jié)合實(shí)例形式分析了javascript組合模式基本概念、原理、應(yīng)用場(chǎng)景及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04JavaScript將數(shù)字轉(zhuǎn)換成大寫(xiě)中文的方法
這篇文章主要介紹了JavaScript將數(shù)字轉(zhuǎn)換成大寫(xiě)中文的方法,涉及javascript字符串及匹配的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03微信小程序嵌入H5頁(yè)面(web-view)的方法詳解
使用<web-view>標(biāo)簽?zāi)茉谛〕绦蛑写蜷_(kāi)外部網(wǎng)頁(yè),但是要打開(kāi)的網(wǎng)頁(yè)的域名必須跟小程序的業(yè)務(wù)域名(業(yè)務(wù)域名可以在小程序的后臺(tái)管理界面添加)一致,否則在真機(jī)上是打不開(kāi)的,下面這篇文章主要給大家介紹了關(guān)于微信小程序嵌入H5頁(yè)面(web-view)的相關(guān)資料,需要的朋友可以參考下2022-09-09js如何實(shí)現(xiàn)小程序wx.arrayBufferToBase64方法實(shí)例
這篇文章主要給大家介紹了關(guān)于js如何實(shí)現(xiàn)小程序wx.arrayBufferToBase64方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03微信小程序MUI導(dǎo)航欄透明漸變功能示例(通過(guò)改變r(jià)gba的a值實(shí)現(xiàn))
這篇文章主要介紹了微信小程序MUI導(dǎo)航欄透明漸變功能,結(jié)合實(shí)例形式分析了通過(guò)改變r(jià)gba的a值實(shí)現(xiàn)透明度漸變功能的相關(guān)操作技巧,需要的朋友可以參考下2019-01-01