发布一个npm包的经验分享

这篇具有很好参考价值的文章主要介绍了发布一个npm包的经验分享。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(一)前言

菜鸡一个,发布npm 包(dfa-filter,使用 dfa 算法进行敏感词过滤)遇到了一堆问题,这里记录一下。

(二)Node 环境与 Browser 环境

Node.js 和浏览器都是 JavaScript 运行环境,但它们之间存在一些区别。

  1. JavaScript APINode.js 和浏览器都提供了一些 JavaScript API,但它们的范围和实现方式不同。例如,Node.js 提供了文件系统和网络编程等 API,而浏览器则提供了 DOMXMLHttpRequestAPI

  2. 模块系统:Node.js使用的是CommonJS模块系统,而浏览器使用的是 ES6 模块系统或AMD 模块系统。在没有配置webpack等构建工具的情况下,浏览器环境不支持CommonJS语法。

  3. 全局对象:Node.js 的全局对象是 global,而浏览器的全局对象是 window

  4. 环境限制:浏览器中的 JavaScript 受到许多限制,例如无法访问本地文件系统、跨域访问其他域名下的资源等,而 Node.js 则没有这些限制。

  5. 处理器和内存:浏览器通常运行在用户电脑的单个进程中,而 Node.js 可以利用多核处理器和更大的内存来提高性能。

(三)列举问题

a)WEBPACK_IMPORTED_MODULE_3__.test) is not a function 错误

出现这个错误往往要检查这个包中是否有module.exports 变量来导出模块,而在浏览器端不支持 module.exports 变量。

解决方法,别用cmjs语法来写用于浏览器的npm包,顺带一提,这个错误就是browserify在帮我转换的时候用了module.exports方法,可能是我那个测试用的项目里也没用一些构建工具

出现其他数字的时候也有可能是自己的引入方式有误,如

import { dfa } from `dfa-filter`
// 实际上根据源码暴露的方式(采用默认导出的形式),需要这样引入
import dfa from `dfa-filter`

b)cant resolve fs 错误

fsNode.js的内置模块,不能在浏览器的环境下运行,浏览了 Stack Overflowgithub,笔者目前仍未找到好的解决方法。欢迎留言指教~

c)cant find module ‘keywords.json’ 错误

这个问题带有一点背景了,在了解到fs模块是不能在浏览器环境下运行后

(四)学到了学到了

a)如何写出兼容 Node 环境与 Browser 环境的 npm 包

可参考这篇译文,简而言之就是要针对两个环境写两套代码,一套适用于 Node ,一套适用于 Browser ,并在package.json中配置Browser环境下的入口文件。如在笔者发布的包中,针对 Node 环境,使用了CommonJS语法,针对Browser环境,使用了ES module语法。并在package.json中进行了如下配置:

{
  /* ... */
  "browser": {
    "./index.js": "./browser.js"
  }
}

这样一来,在Browser环境下调用该包时,就会使用browser.js的代码了。

b) 有没有方法把 Node 环境中的代码直接转换成浏览器可用的代码

有的,就是 browserify。可以使用 browserify 转换自己的代码,使其在浏览器端也能够正常运行。

首先,需要通过 npm 安装 browserify

npm install -g browserify

然后,需要将需要转换的代码放在一个单独的文件中,例如 main.js

const keyword = require('./keyword.json');
console.log(keyword);

接着,需要使用 browserify 命令将 main.js 文件转换成浏览器可用的文件:

browserify main.js -o bundle.js

这个命令会生成一个名为 bundle.js 的文件,其中包含了 main.js 文件的所有依赖关系和转换后的代码。

c) npm包发布过程中常用的一些命令

// 切换源
npm config set registry https://registry.npmjs.org/
// 淘宝源
npm config set registry https://registry.npm.taobao.org/

// 更新包
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]

// 发布包
npm publish

// 在本地 web 项目中测试包
npm link // 在包目录下运行
npm link <packageName> // 在 web 项目下运行

总结

注意区分 node 环境与 browser 环境!文章来源地址https://www.toymoban.com/news/detail-486508.html

到了这里,关于发布一个npm包的经验分享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue2封装一个全局通知组件并发布到NPM

    ✍🏼作者:周棋洛,计算机学生 ♉星座:金牛座 🏠主页:点击查看更多 🌐关键: vue2 组件封装 npm发包 你好!我是王子周棋洛,好久没写文了。 今天带大家 封装 一个类似 element-ui 的全局通知组件,并发布到 npm 后安装使用自己封装的组件。go,go,go🎉 原因1:现成UI组件

    2024年02月09日
    浏览(52)
  • 如何使用vite框架封装一个js库,并发布npm包

    目录 前言介绍 一、创建一个vite项目 1、使用创建命令:  2、选择others 3、 模板选择library 4、选择开发语言 ​编辑 二、安装依赖 三、目录介绍 1、vite.config.ts打包文件 2、package.json命令配置文件 三、发布npm 1、注册npm账号 2、设置npm源 3、登录到npm 4、推送到npm仓库 5、查看

    2024年01月25日
    浏览(43)
  • 一个基于.NET7的开源DNS服务 DnsServer 的部署使用经验分享

    接上篇 docker-bind 的使用搭建了一个 dns 服务,本篇将介绍另外一款 DnsServer 的部署和使用,更专注,更轻量。 基于 .NET 7 实现 ,支持 Windows、Linux、macOS 和 Raspberry Pi 开箱即用,使用简单,高性能 提供 Web 控制台,可视化管理,查看使用情况 提供了对网络的额外控制,允许阻止

    2024年02月05日
    浏览(43)
  • 【Web安全】小白怎么快速挖到第一个漏洞,src漏洞挖掘经验分享,绝对干货!

    src漏洞挖掘经验分享 – 掌控安全以恒 一、公益src 公益src是一个白帽子提交随机发现的漏洞的品台,我们可以把我们随机发现或者是主动寻找到的漏洞在漏洞盒子进行提交。 在挖掘src的时候不能越红线,一般情况下遇到SQL注入 只获取数据库名字以证明漏洞的存在即可,最好

    2024年02月13日
    浏览(72)
  • 分享一个在 dotnet 里使用 D2D 配合 AOT 开发小而美的应用开发经验

    本文将分享我在 dotnet 里面使用 Direct2D 配合 AOT 开发一个简单的测试应用的经验。这是我用不到 370 行代码,从零开始控制台创建 Win32 窗口,再挂上交换链,在窗口上使用 D2D 绘制界面内容,最后使用 AOT 方式发布的测试应用。成品文件体积不超过 10MB 且运行内存稳定在 60MB 以

    2024年04月26日
    浏览(37)
  • 【NPM】包的指令

    npm 安装的包可以根据其用途和作用进行分类,一般可以分为以下几种类型: 普通依赖(Regular Dependencies): 这些是你项目中的实际依赖项,用于构建、运行或扩展你的应用程序。这些依赖会被包含在你的应用程序中,并在运行时使用。普通包会被安装在项目的 node_modules 文件

    2024年02月11日
    浏览(30)
  • NPM包的安装、更新、卸载

    目录 1、下载安装全局包 2、解决全局安装包时的EACCES权限错误 2.1 重新安装NPM 2.2 手动更改npm的默认目录 3、更新从注册表下载的包 3.1 更新本地包 3.2 更新全局安装的软件包 3.3 确定哪些全局包需要更新 3.4 更新单个全局包 3.5 更新所有全局安装的软件包 4、在项目中使用

    2024年02月20日
    浏览(58)
  • node.js相关的npm包的集合

    一个简单易用的字符串解析和格式化库 RxJS是一组模块化的库,用于使用 JavaScript 中的可观察集合和组合来组合异步和基于事件的程序。 微型 200b 功能事件发射器/发布订阅. Underscore.js是一个用于 JavaScript 的实用程序带库,它在不扩展任何核心 JavaScript 对象的情况下为通常的功

    2024年02月14日
    浏览(50)
  • 微信小程序关于npm包的学习笔记

    目录 一、如何在小程序中使用npm包 现在来看看如何在小程序中使用npm包  1.创建包管理器 2.构建npm包  3.使用vant包中的组件   二、自定义vant组件的主题 三、小程序的API的Promise化 1.为什么需要Promise化 2.使用第三方包实现Promise化   三、全局数据共享(数据管理) 1.安装对应

    2024年02月10日
    浏览(34)
  • 【C++初阶】前言——C++的发展简述及学习方法分享

     ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记: Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 ====

    2024年02月08日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包