npm 发布webpack插件 webpack-html-cdn-plugin
初始化一个项目
npm init
切换到npm源
淘宝
npm config set registry https://registry.npm.taobao.org
npm
npm config set registry http://registry.npmjs.org
登录
npm login
登录状态
npm who am i
简单的插件, 将cdn文件插入到html中
const flatMap = require("array.prototype.flatmap"); function getList(modules, key, type) { return flatMap(modules, i => typeof i === 'string' ? i : i[key]) .filter( i => i && i.split(".").pop() === type ); } class WebpackHtmlCdnPlugin { constructor( { modules = [], isDev = true }) { this.modules = modules; this.isDev = isDev; } apply(compiler) { console.log(compiler); compiler.hooks.compilation.tap("WebpackHtmlCdnPlugin", compilation => { compilation.hooks.htmlWebpackPluginBeforeHtmlGeneration.tapAsync( "WebpackHtmlCdnPlugin", (data, callback) => { let key = this.isDev ? "dev" : "prod"; const jsList = getList(this.modules, key, "js"); const cssList = getList(this.modules, key, "css"); data.assets.js = jsList.concat(data.assets.js); data.assets.css = cssList.concat(data.assets.css); // console.log(" data.assets.js", data.assets.js); // console.log(" data.assets.css", data.assets.css); callback(null, data); } ); }); } } module.exports = WebpackHtmlCdnPlugin;
package.json, 设置用户和发布仓库
{ "name": "webpack-html-cdn-plugin", "version": "1.0.1", "description": "webpack cdn inject", "main": "./src/index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "publishConfig": { "registry": "http://registry.npmjs.org" }, "keywords": [ "webpack", "cdn" ], "author": "ahaoboy <504595380@qq.com>", "license": "ISC", "devDependencies": { "array.prototype.flatmap": "^1.2.3" } }
发布, 修改后发布的话, 需要更新版本信息
npm publish
使用, 指定版本号安装, 默认会安装最新版
npm i webpack-html-cdn-plugin@1.0.1 -D
const WebpackHtmlCdnPlugin = require("webpack-html-cdn-plugin"); configureWebpack: { externals: { vue: "Vue" }, plugins: [ new WebpackHtmlCdnPlugin({ modules: [ { dev: ["https://unpkg.com/vue@2.6.11/dist/vue.js"], prod: ["https://unpkg.com/vue@2.6.11/dist/vue.min.js"] } ], isDev: process.env.NODE_ENV === "development" }) ] }
生产环境
开发环境
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
武汉火神山医院招募紧急 IT 运维志愿者需求(仅限企业)
为抗击新型冠状病毒感染的肺炎疫情,确保建设中的火神山医院信息系统正常运转,现面向全国IT企业公开招募院内IT运维志愿者。 委托HIT专家网发布具体需求如下: 一、工作地点:火神山医院(武汉市蔡甸区)。 二、工作内容:院内(含污染区)终端维护,包括电脑、打印机、终端网络等桌面运维工作。 三、报名条件:熟悉医院IT业务和桌面运维工作内容,勇于担当奉献的IT企业组织的志愿者队伍。公司地域不限,志愿者须驻场承担终端运维工作。 四、工作周期:预计到疫情结束为止。 五、工作期间,医院将提供相关防护措施。 六、对于志愿者交通食宿方面的需求,医院信息筹备组将尽可能予以协调帮助。 七、具体将根据志愿者人员数量,决定排班计划,每次进入污染区2-4小时。 八、报名联系人:HIT专家网 朱小兵 (微信号:zhu_HIT,电话:19910639570) 火神山医院信息筹备组 2020年1月26日 来源:HIT专家网供稿:火神山医院信息筹备组
- 下一篇
JavaScript 包管理器 Yarn 2 或将以 berry 名称发布?
昨天一名开发者(@brentvatne)在 Yarn 2 的 GitHub 仓库中提交了一个 issue,建议官方使用不同的名称来发布 Yarn 2。 brentvatne 表示,他自己是一名开源库的作者,一直在推荐他的用户通过 yarn 来使用他的开源库。然而到了 yarn v2,他不能再这样做了,因为 yarn v2 与React Native 不兼容,所以与 yarn 也不兼容,最终导致 yarn v2 在许多项目中都无法使用。 针对此问题,brentvatne 提出了他的建议,他建议在yarn PnP被用于现有生态系统中所有主要项目之前,应该以其他名称发布它。如此一来,使用者可以轻松使用并从中获益,库作者也能保证他们的库能够正常使用。 Yarn 核心维护者@arcanis在issue 的评论中进行了回应,他表示团队已经获悉并正在讨论此问题,更不希望破坏工作流程。目前 Yarn 2 的仓库使用 berry 名称的原因是为了与 1.x 进行区分,明确说明 1.x 分支不会发生任何变化。但如果要以 berry 软件包名称和 berry 二进制名称发布 CLI 二进制文件,这将会导致一...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作