一日一技:如何在浏览器中使用npm包?

简介: 一日一技:如何在浏览器中使用npm包?

我们知道,Python的第三方库一般可以使用pip来安装。如果代码比较简单,我们甚至可以把第三方库的代码复制下来,放到项目里面导入。


但由于JavaScript生态里面,有Node.js这个东西,这就导致第三方库有两种不同的导入方式。如果我们要做一个网站,我们通常会在HTML中,使用<script>标签引入.js文件,例如:


<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>


这样导入了.js文件以后,里面的代码在网页加载完成后就会运行。


但在Node.js生态里面,第三方包一般需要使用npm安装,然后在代码里面通过require导入。最后再用webpack打包编译成能直接在浏览器中运行的JavaScript代码。


如果我找到一个第三方的包,它只提供了npm版本,没有提供直接在浏览器中导入的版本怎么办?


举个例子,我想把CSS Selector转换成XPath。在Github上面,可以搜索到很多这种第三方包,例如:featurist/css-to-xpath: Convert CSS selectors to XPaths, in JavaScript[1] 或者sergeidyga/cssxpath[2]


但你会发现,这些包都只提供npm安装的版本,没有办法直接在浏览器中通过<script>标签导入。如果我想做一个如下图所示的简单网页,难道我还要用webpack去编译?


1.png


在浏览器能运行的JavaScript中,require关键字都是不存在的,如下图所示。因此,我们甚至没有办法把包里面的代码复制出来用:


2.png


遇到这种问题怎么办呢?难道我们需要人工一行一行去改写这个包里面的代码让它能直接在浏览器运行?还是必须用webpack来打包编译?其实我们有一个方法,可以把npm版本的包转换成浏览器能运行的包。虽然这个办法还是要依赖Node.js和npm,但是非常简单。你完全不需要知道webpack是什么就可以完成。



cssxpath为例,我们首先用npm安装它:


npm i cssxpath


然后,我们写一个main.js文件,只需要两行代码:


var cssxpath = require('css-to-xpath')
window.cssxpath = cssxpath


接下来,使用npm全局安装browserify:


npm install -g browserify


安装完成以后,执行命令:


browserify main.js -o bundle.js


命令运行完成以后,会生成一个bundle.js文件。现在我们就可以把这个文件和HTML代码放在一起,通过<script>标签导入了:


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Css Selector 转 XPath</title>
        <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
        <script src="bundle.js"></script>
    </head>
    <body>
        <div class="app">
            <h1>Css Selector转XPath</h1>
            <div>
                <input type="text" class="selector" style="width: 500px">
                <button class="translate" x-on:click="translate(selector)">转换</button>
            </div>
            <div>
                <h4>转换结果:</h4>
                <span class="result"></span>
            </div>
        </div>
    <script>
        $('.translate').on('click', function() {
            selector = $('.selector').val()
            result = window.cssxpath(selector)
            $('.result').text(result)
        })
    </script>
    </body>
</html>


运行效果如下图所示:


3.png



main.js中,我们定义了window.cssxpath = cssxpath,所以,在HTML代码里面,我们就可以通过window.cssxpath(selector)来使用它了。


参考文献


[1] featurist/css-to-xpath: Convert CSS selectors to XPaths, in JavaScript: https://github.com/featurist/css-to-xpath


[2] sergeidyga/cssxpath: https://github.com/sergeidyga/cssxpath


请关注微信公众号【未闻Code】获取更多精彩文章。

目录
相关文章
|
1月前
|
前端开发 小程序 API
【微信小程序】-- 使用 npm 包 - API Promise化(四十二)
【微信小程序】-- 使用 npm 包 - API Promise化(四十二)
|
1月前
|
资源调度 小程序 前端开发
【微信小程序】-- 使用 npm 包 - Vant Weapp(四十一)
【微信小程序】-- 使用 npm 包 - Vant Weapp(四十一)
|
1月前
|
JavaScript Linux 数据安全/隐私保护
node内网安装npm私服以及依赖包上传发布verdaccio
node内网安装npm私服以及依赖包上传发布verdaccio
206 1
|
1月前
|
资源调度 小程序 前端开发
【微信小程序】-- npm包总结 --- 基础篇完结(四十七)
【微信小程序】-- npm包总结 --- 基础篇完结(四十七)
|
1月前
|
JavaScript
Nodejs 第七章(发布npm包)
Nodejs 第七章(发布npm包)
38 0
|
1月前
|
资源调度
#发布npm包遇到错误,因为用了淘宝镜像地址的原因的解决方法-403 403 Forbidden - PUT https://registry.npmmirror.com/-/user/org.cou
#发布npm包遇到错误,因为用了淘宝镜像地址的原因的解决方法-403 403 Forbidden - PUT https://registry.npmmirror.com/-/user/org.cou
222 0
|
1月前
|
JavaScript 前端开发
实现自动扫描工作区npm包并同步cnpm
前言 在开发一个多npm包的项目时,时常会一次更新多个包的代码,再批量发布到 npm 镜像源后。 由于国内网络环境的原因,大部分都会使用淘宝的镜像源进行依赖安装,为了确保发布后,通过淘宝源能够顺利的安装,通常会手动同步一下 cnpm sync vue react 但在一些大型的 monorepo 的多包工程里,手动输入包名是一件非常繁琐的事情,所以准备把输入的过程简化一下,改成自动扫描工作区的包名,然后自动同步。 进而有了这个工具 工具的使用 直接通过 npx 运行即可,将自动扫描所有的包
|
29天前
|
前端开发 JavaScript 数据安全/隐私保护
从0到1开发一个自己的npm包完整过程
创建自己的 npm 包涉及六个步骤:1) 注册 npm 账号;2) 使用 `npm init` 初始化项目,确保 package.json 的 name 唯一且 private 为 false;3) 开发项目,可封装 UI 组件、函数库或命令行工具;4) 本地调试,通过 `npm link` 在项目中测试;5) `npm login` 登录账号,可能需切换至官方仓库;6) 使用 `npm publish` 发布项目。注意版本号递增,无意义的包不建议发布。
36 2
从0到1开发一个自己的npm包完整过程
|
1月前
|
JSON 小程序 前端开发
小程序中使用npm安装vant组件实现按需引入减少代码包大小,避免触发用户隐私协议
微信小程序按需引入 vant 组件,自动清除项目中未使用的 vant 组件,减少代码包大小,避免因未使用到的 vant 组件触发隐私协议提交审核时被拒
35 1
小程序中使用npm安装vant组件实现按需引入减少代码包大小,避免触发用户隐私协议
|
11天前
|
安全 JavaScript 前端开发
怎么发布npm包?
该文介绍了如何在JavaScript环境中发布npm包的步骤。首先,确保npm客户端配置使用官方源,以避免安全和兼容性问题。接着,登录npm账号。然后,检查`package.json`文件,其中包的`name`应唯一,版本号遵循语义化版本控制。更新版本号后,使用`npm publish`发布包。最后,通过在新环境中全局安装并测试包来验证发布是否成功

热门文章

最新文章

推荐镜像

更多