游戏攻略网
当前位置: 首页 游戏攻略

在浏览器控制台安装npm包是什么操作(在浏览器控制台安装npm包是什么操作)

时间:2023-05-24 作者: 小编 阅读量: 3 栏目名: 游戏攻略

在浏览器控制台安装npm包是什么操作大音希声,大象无形,大智若愚,大巧若拙,越是“复杂”的东西,其原理越趋向“简单”,大道至简,繁在人心原文来自:https://segmentfault.com/a/1190000040875211?_。

大音希声,大象无形,大智若愚,大巧若拙,越是“复杂”的东西,其原理越趋向“简单”,大道至简,繁在人心。

原文来自: https://segmentfault.com/a/1190000040875211?_ea=195828493

我们都知道,npm 是 Javascript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系。虽然作为命令行工具的 npm 近年来逐渐式微,但是作为广泛使用的存储库的 npm,却依然如日中天,还是世界上最大的软件注册表

通常,我们通过npm install xxx在 React、Vue、Angular 等现代前端项目中安装依赖,但是前端项目在本质上还是运行在浏览器端的 HTML、JavaScript 和 CSS,那么,我们有办法在浏览器控制台直接安装 npm 包并使用吗?

如果你对这个问题感兴趣,不妨跟着我通过本文一探究竟,也许最终你会发现:越是“复杂”的东西,其原理越趋向“简单”

通过<script />引入 cdn 资源

在浏览器控制台安装 npm 包,看起来是个天马行空的想法,让人觉得不太切实际。如果我换一个方式进行提问:如何在浏览器/HTML 中引入 JavaScript 呢?也许你马上就有了答案:<script />标签。没错,我们的第一步就是通过 <script />标签在 HTML 页面上引入 cdn 资源。

那么,又该如果在控制台在页面上插入<script />标签来引入 CDN 资源呢?这个问题可难不倒你

// 在页面中插入<script />标签const injectScript = (url) => {const script = document.createElement('script');script.src = url;document.body.appendChild(script);};

我们还得在资源引入后以及出现错误时,给用户一些提示:

script.onload = () => {console.log(pkg_name_origin, ' 安装成功。');};script.onerror = () => {console.log(pkg_name_origin, ' 安装失败。');};

这么以来,我们就可以直接在控制台引入 cdn 资源了,你可以再额外补充一些善后工作的处理逻辑,比如把<script />标签移除。当然,你也完全可以通过创建<link />标签来引入css样式库,这里不过多赘述。

根据包名安装 npm 包

上面实现了通过<script /> 引入 cdn 资源,但是我们安装 npm 包一般都是通过npm install后面直接跟包名来完成的,显然单靠<script />的方式难以达到我们的预期,那么,有没有一种方式,可以将我们的包名直接转换成 cdn 资源地址呢?

答案当然是:有。否则我写个屁啊 ,cdnjs就提供了这样的能力。

cdnjs 提供了一个简单的 API,允许任何人快速查询 CDN 上的资源。具体使用读者可参考官方链接,这里给出一个根据包名查询 CDN 资源链接的示例,可以直接在浏览器地址栏打开这个链接查看:https://api.cdnjs.com/libraries?search=jQuery,这是一个 get 请求,你将看到类似下面的页面,数组的第一项为名称/功能最相近的资源的最新 CDN 资源地址

是以,根据包名搜索 cdn 资源 URL 便有如下的实现:

const cdnjs = async (name) => {const searchPromise = await fetch(`https://api.cdnjs.com/libraries?search=${name}`,// 不显示referrer的任何信息在请求头中{ referrerPolicy: 'no-referrer' });const { results, total } = await searchPromise.json();if (total === 0) {console.error('Sorry, ', name, ' not found, please try another keyword.');return;}// 取结果中最相关的一条const { name: exactName, latest: url } = results[0];if (name !== exactName) {// 如果名称和你传进来的不一样console.log(name, ' not found, import ', exactName, ' instead.');}// 通过<script />标签插入injectScript(url);};

安装特定版本的 npm 包

我们在 npm 中还可以通过类似npm install jquery@3.5.1的语法安装特定版本的 npm 包,而 cdnjs 只能返回特定版本的详细信息(不含 cdn 资源链接)。

UNPKG在此时可以帮我们一个大忙。unpkg 是一个快速的全球内容分发网络,适用于 npm 上的所有内容。使用它可以使用以下 URL 快速轻松地从任何包加载任何文件:unpkg.com/:package@:version/:file。

例如,访问https://unpkg.com/jquery@3.5.1会自动重定向到https://unpkg.com/jquery@3.5.1/dist/jquery.js,并返回v3.5.1版本的jQuery文件内容(如果不带版本号,会返回最新的资源):

也就是说,我们可以将https://unpkg.com/➕包名直接丢给<script />标签来加载资源:

const unpkg = (name) => {injectScript(`https://unpkg.com/${name}`);};

完整代码

将上面的代码简单整理,并通过一个统一的入口方法npmInstall进行调用:

// 存储原始传入的名称let pkg_name_origin = null;const npmInstall = (originName) => {// Trim stringconst name = originName.trim();pkg_name_origin = name;// 三种引入方式// 如果是一个有效的URL,直接通过<script />标签插入if (/^https?:\/\//.test(name)) return injectScript(name);// 如果指定了版本,尝试使用unpkg加载if (name.indexOf('@') !== -1) return unpkg(name);// 否则,尝试使用cdnjs搜索return cdnjs(name);};// 在页面中插入<script />标签const injectScript = (url) => {const script = document.createElement('script');script.src = url;script.onload = () => {console.log(pkg_name_origin, ' 安装成功。');};script.onerror = () => {console.log(pkg_name_origin, ' 安装失败。');};document.body.appendChild(script);// document.body.removeChild(script);};const unpkg = (name) => {injectScript(`https://unpkg.com/${name}`);};const cdnjs = async (name) => {const searchPromise = await fetch(`https://api.cdnjs.com/libraries?search=${name}`,// 不显示referrer的任何信息在请求头中{ referrerPolicy: 'no-referrer' });const { results, total } = await searchPromise.json();if (total === 0) {console.error('Sorry, ', name, ' not found, please try another keyword.');return;}// 取结果中最相关的一条const { name: exactName, latest: url } = results[0];if (name !== exactName) {console.log(name, ' not found, import ', exactName, ' instead.');}// 通过<script />标签插入injectScript(url);};

我们可以使用类似npmInstall('moment')的方式在控制台进行调用:

下面这些调用方式自然也是支持的:

npmInstall('jquery'); // 直接引入npmInstall('jquery@2'); // 指定版本npmInstall('https://cdnjs.Cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'); // cdn地址

不每次都写这些函数行不行

看了上面的操作,确实很简单,但是也许你会说:每次要使用时,我都得在控制台定义和调用函数,有些麻烦,不每次都写这些函数行不行?那自然是行的啦,你完全可以自己写一个浏览器插件,将这些JS代码注入页面,详情可参考7分钟学会写一个浏览器插件——突破某SDN未登录禁止复制的限制。

如果你实在不想写,其实有人已经为你写好了,那便是Console Importer,它可以让你的浏览器控制台成为更强大的实验场

  • 使用示例:
  • 效果图:

链接:Console Importer | Chrome 插件地址

可以干什么

那么,本文介绍的方法和工具到底有什么用呢?

平时开发中,我们经常会想要在项目里尝试一些操作或者验证一些库的方法、打印结果,通过本文的学习,以后你完全可以直接在控制台引入loadsh、moment、jQuery、React 等来进行使用和验证,减少在项目中进行console.log验证后再删除的频次。

  • 你可以通过引入jQuery方便的进行一些项目、页面中的DOM操作;
  • 你可以通过引入axios进行一些简单的接口请求;
  • 你可以通过引入moment.js来验证一些时间格式化方法的使用;
  • 你可以通过引入loadsh并调用它的方法完成一些便捷的计算;
  • ...

可以学到什么

unpkg

unpkg 是一个内容源自 npm 的前端常用全球快速 CDN,它能以快速、简洁、优雅的方式提供任意包、任意文件的访问,在流行的类库、框架文档中常常能看到它的身影。使用方式一般是unpkg.com/:package@:version/:file。或者更简洁一点:https://unpkg.com/➕包名,包名包含版本号时,你将获得对应版本的js文件,不包含版本号时,你将获得这个库的最新版js文件。

cdnjs

cdnjs是一种免费的开源 CDN 服务,受到超过 12.5% 的网站的信任,每月处理超过 2000 亿次请求,由 Cloudflare 提供支持。它类似 Google CDN 和微软CDN服务,但是速度比这二者更加快。CDNJS 上提供了众多 JavaScript 库,你可以直接在网页上引用这些 JS 文件,实现用户浏览网站的最佳速度体验。

你还可以通过它的查询APIhttps://api.cdnjs.com/libraries?search=xxx进行特定库的cdn地址的查找,这个API还会给你返回一些你所查询的库的替代品

大道至简,繁在人心

越是“复杂”的东西,其原理也许越是趋向“简单”,大道至简,繁在人心,祝每一个努力攀登者,终能豁然开朗,释然于心。

参考资料
  • Console Importer
    推荐阅读
  • 银耳的功效与作用(银耳的功效与作用禁忌和食用方法)

    含有大量胡萝卜素,有助于维持皮肤细胞组织正常机能,刺激皮肤新陈代谢,保持皮肤润泽细嫩。适宜与久病体虚或是虚劳的补益。含钙,钙是脑代谢不可缺少的重要物质。

  • 注销不了和平精英的账号怎么办(一言不合就注销账号)

    昨天晚上在玩《和平精英》的时候,开麦和队友说"你们先进圈,我打个电池",寝室一阵哄笑。作为最近刷屏各大网络媒体资讯的腾讯新手游,《和平精英》在一波又一波玩家的初体验之后,水涨船高。相比较彩蛋,在玩家看重的玩法方面,《和平精英》也交出了满意的答卷。最搞笑的是,有人把《和平精英》作为蹭流量的工具,还能不能愉快玩耍了?又说了,《和平精英》卸载量2.5亿。

  • 干松茸要不要冷藏(干松茸要冷藏吗)

    下面更多详细答案一起来看看吧!干松茸要不要冷藏松茸和其他的蘑一样,也是可以用来干制的,只需要将松茸切成片,然后放在阳光下晒干,再用干燥的盒子装好,与花椒和陈皮等吸水性好的食物放在一起,这样的保存方法可以保存1-3年不会变质。干松茸已经就是经过加工,干制,最后成型,自然也就不必担心会变质腐败,只需要找一个干燥并且避光的位置存放即可。

  • 最新款路虎汽车大全(最便宜路虎新款曝光)

    最新款路虎汽车大全复活的路虎卫士光芒四射,以致让同场发布的新款路虎发现神行黯然失色,不少人忽略了它的存在。而这次车型的改款,路虎似乎也发现了自己的不足,对新款发现神行来了一次全方位的升级。同时,前保险杠也作出了调整,虽然整体设计更为简约,但简约的设计却为新款发现神行营造出更高的视觉好感度。

  • 作文好词好句抄一下(背好词好句能写好作文吗)

    积累好词好句是无论什么时候老师都挂在嘴边的,这没有错只是我们用的方法不对。语言类的学习和表达都是以应用为目的的。即使把它背下来也很难做到无缝衔接,说不定前后还不通造成矛盾!最后让孩子去仿写这个是很关键的。用别人好的方法写出你生活中的内容,只有通过这样的方法才能把别人的好东西消化成为自己的。每个星期练习两篇,句子仿写应用多了,自然也就开窍了,写起文章来会轻松有趣很多!

  • 手机qq怎么转发消息记录 手机qq怎么转发聊天记录?

    手机qq转发消息记录的方法如下:1、打开手机QQ,选择需要转发聊天记录的好友。QQ是腾讯公司借鉴于ICQ开发的一款基于Internet的即时通信软件,于1999年2月推出,是中国的社交软件巨头。QQ支持在线聊天、视频通话、点对点断点续传文件、共享文件、网络硬盘、自定义面板、QQ邮箱等多种功能,并可与多种通讯终端相连。

  • 包饺子擀饺皮用英语怎么说(饺子是dumpling那饺子馅)

    包饺子擀饺皮用英语怎么说VixueTalk英语口语头条号独家整理文章,未经允许请勿转载、二次修改或截取片段盗用,违权必究。说起饺子的英文,大多数伙伴一定首先想到dumpling,或者是它的汉语拼音Jiaozi了。dumpling其实在词典中,dumpling泛指蒸或煮的小面团,或水果馅的点心。像是粽子、包子、汤圆、青团等,其实都可以说成dumpling,它并不能专指饺子哦。boil表示烹饪方法中“煮”,尤其是用沸水煮。

  • 2022无锡鼋头渚樱花节景区可以飞无人机吗?

    2022无锡鼋头渚樱花节景区可以飞无人机吗?禁止私自携带无人机进入景区飞行。

  • 丈夫出轨被抓后妻子终于爆发(妻子出轨丈夫被拘留)

    同时制定了对国有企业职工买断工龄,统一解除劳动合同的政策。张薛民和李凌娟的女儿今年8岁,刚上小学一年级。能租到这套房子,还得益于李凌娟厂里的人事部长刘胜。李凌娟向马路上一招手,一辆出租车停在面前,夫妻俩把刘胜扶到车上送到了家。夫妻俩一夜无话。张薛民似乎感觉妻子有些不对劲,每次他要求与妻子温存的时候,李凌娟都会找理由拒绝。张薛民经常用醉酒解愁,如此一来,夫妻俩更疏远了。

  • 陈亮跟廖嫣然是什么电视剧(下面为大家解答)

    张继红在生下女儿之后不幸离世,临终前将丈夫廖文辉和女儿廖嫣然托付给江月明,从此方皓和廖嫣然的命运紧紧连接在一起。二十年后,已长大成人的方皓就读于北京某医科大学。青梅竹马的廖嫣然也追随其来到北京,方皓同父异母的弟弟方子杰随即赶来。与此同时,感情失意的廖嫣然在工作上努力认真并小有成就,面对方子杰始终如一的不懈追求,最终被方的真诚所打动,两个人终于走在了一起。