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

在浏览器控制台安装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
    推荐阅读
  • 鬼吹灯之龙岭迷窟上一部是什么(鬼吹灯之龙岭迷窟的上一部简介)

    《鬼吹灯之精绝古城》是企鹅影视、梦想者电影、正午阳光影业联合出品,改编自天下霸唱所著同名小说的网络季播剧。该剧由孔笙导演,侯鸿亮制片,靳东、陈乔恩、赵达、岳旸等人主演。《龙岭迷窟》是由韩志杰担任监制,费振翔执导,潘粤明、张雨绮、姜超领衔主演,高伟光特别出演的探险悬疑网剧。

  • 起腰的基本方法(需要怎么锻炼腰部)

    运动时要尽量使腰部肌肉放松。转胯回旋两腿开立,稍宽于肩,双手叉腰,调匀呼吸。注意上身要基本保持直立状态,腰随胯的旋转而动,身体不要过分地前仰后合。先向左转腰,再向右转腰。与此同时,两臂随腰部的左右转动而前后自然摆动,并借摆动之力,双手一前一后,交替叩击腰背部和小腹,力量大小可酌情而定,如此连续做30次左右。

  • 卫生巾国内外测评排名(卫生巾进口国产哪个更好)

    据介绍,安全性能指标包括微生物、甲醛、pH、可迁移性荧光增白剂、化学物质等五个方面。35款卫生巾样品的检测结果是均未检出甲醛。报告显示,35款卫生巾pH在安全范围内,对人体无伤害。本次比较试验35款卫生巾pH值测试结果均在4.5到6.5之间,对人体无害。本次测试的35款商品卫生指标及安全性能优秀,可放心选购。

  • 蒸地三鲜怎么做(蒸地三鲜的做法介绍)

    跟着小编一起来看一看吧!蒸地三鲜怎么做材料:茄子1根、土豆1个、青椒1个、红辣椒3片、盐、酱油、核桃油将茄子切好,放入小碗中蒸熟备用。将土豆煮熟,将皮剥掉,切块后摆在碗中。将青椒切成丁放入碗中,点缀上几个红辣椒片。撒入核桃油、酱油、盐拌一拌即可。

  • 拨开云雾见青天求下一句(拨开云雾见青天求下一句是什么)

    接下来我们就一起去研究一下吧!拨开云雾见青天求下一句拨开云雾见青天这句话没有下一句,是一句单独使用的句子。比喻冲破黑暗,见到光明。出自明朝罗贯中的《三国演义》:“今遇明主,如拨云雾而见青天!”

  • 无骨的鸡腿肉怎么做(无骨的鸡腿肉的制作方法)

    无骨的鸡腿肉怎么做?下面更多详细答案一起来看看吧!无骨的鸡腿肉怎么做先把鸡肉用水烫一下,差不多熟了可以了,捞出用清水洗净浮沫。油烧热,放入葱姜蒜末,爆出香味少放点十三香,再放切好的辣椒,炒一分钟左右放入鸡肉。再依次放入酱油,盐,味精,快出锅时放入味精。

  • 单缸双缸洗衣机区别(都说双缸洗衣机不好)

    近几年双缸洗衣机的突然变“火”,其实是波轮以及滚筒洗衣机的不足之处所迅速的。但是易缠绕的不足之处一直没有得到解决,就算是最新款、最高端的波轮洗衣机,都没有真正解决这个问题,只不过是有防缠绕功能而已!创新喷淋漂洗、脱水的同时喷淋,迅速冲掉残留污渍和洗涤剂,节能省水;流线蝶形波轮,顺时针交换洗涤,有效打散衣物,减少缠绕,将洗衣品质做到了更好。

  • 猫咪年龄怎么看(怎样判断猫咪的年纪)

    下面更多详细答案一起来看看吧!猫咪年龄怎么看脐带:如果你看到一个小猫,脐带还没有脱落的话,应该不超过三天。眼睛:一般来说,小猫10天左右就睁眼了,这是一个平均的数字。耳朵:刚出生的时候,耳道是关闭的,要在第5—8天的时候才开始打开,到15天—20天左右就可以立起来了。

  • 低电量模式怎么关闭(如何关闭手机低电量模式?)

    我们一起去了解并探讨一下这个问题吧!低电量模式怎么关闭以苹果手机为例,打开手机的设置。在下拉的菜单中有一个电池的选项,然后点击进入。这是你只需要单机低电量模式后面的开关按钮,是其按钮变成白色,低电量模式就关闭了。然后直接退出设置,手机就回到了正常的模式。

  • 吉利自由舰停产了吗(吉利自由舰为什么停产)

    吉利自由舰是吉利旗下的一款小型车,现已停产。吉利自由舰用过四款发动机,分别是1.0升自然吸气发动机、1.3升自然吸气发动机、1.5升自然吸气发动机和1.6升自然吸气发动机。该发动机配备多点喷射技术,使用铝合金气缸盖和铸铁气缸体。与这款发动机匹配的是5速手动变速箱。