首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创建需要外部程序的npm模块是不是不好的做法?

创建需要外部程序的npm模块并不是一个理想的做法。这种做法会增加模块的复杂性,并且可能导致依赖关系的混乱。以下是详细的解释:

  1. 复杂性增加:如果一个npm模块依赖于外部程序,那么使用该模块的开发者需要确保他们的环境中安装了这些外部程序。这增加了使用模块的门槛,并且可能导致开发者在配置和安装过程中遇到问题。
  2. 依赖关系混乱:当一个模块依赖于外部程序时,它的依赖关系变得更加复杂。开发者需要确保正确安装和配置这些外部程序,并且需要处理这些外部程序的版本兼容性问题。这可能导致依赖关系的混乱,使得模块的维护和升级变得困难。
  3. 可移植性差:如果一个模块依赖于特定的外部程序,那么在不同的环境中使用该模块可能会面临问题。开发者需要确保在每个环境中正确安装和配置这些外部程序,这增加了部署和迁移的复杂性。

相反,更好的做法是将外部程序的功能集成到npm模块中,以便模块的使用变得简单和可移植。这可以通过使用适当的库、工具或技术来实现。例如,可以使用纯JavaScript实现某些功能,或者使用npm模块来处理特定的任务。

总结起来,创建需要外部程序的npm模块会增加复杂性、导致依赖关系混乱,并且可移植性差。更好的做法是将外部程序的功能集成到模块中,以提供简单、可移植的解决方案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

黑石创建虚拟机能跟外部CVM交流吗?能,但需要黑石作为代理

黑石创建虚拟机能跟外部CVM交流吗?...能测试环境3台Windows机器:跟黑石同子网cvm、黑石、黑石里vmware workstation创建虚机我在跟黑石同子网cvm和黑石里虚机上都建了简易webserver,分别测试了互相ping...、互相远程、互相访问对方webserver,只有cvm ping 黑石里虚机这种行不通(黑石里虚机ping cvm是通),其他tcp/udp协议互访都没有问题。...比如我黑石是10.255.4.29,跟黑石同一子网cvm是10.255.4.115黑石里我NAT方式建了虚机,虚机dhcp分配这个范围IP 10.255.6.127-10.255.6.254,分配...ICMP 是 IP 堆栈 Internet 层一部分,它最接近于 OSI 模型第 3 层(网络层)。

52520

怎样才能写出更好 CSS

在实验或构建小型应用时,这种做法尚且可行,但是到了专业级别……想都不要想。很幸运是,有了 SCSS 后,我们依然可以继续沿用这种做法。...vendors:外部资源。应用或项目怎么可能没有外部库呢?你可以将所有不依赖于你文件都放入该文件夹。例如,你可以放入Font Awesome文件、Bootstrap和其他类似的东西。...下面我们介绍一种更适合小项目的做法。 首先,你不需要 vendors 文件夹。可以将所有外部 CSS 代码放在头部link标签内。...只需按以下步骤操作: 创建项目:mkdirmy-app && cd my-app 初始化:npm init 添加node-sass库:npm install node-sass --save-dev 创建文件夹...现在,你可以准备开始编写具有可维护性、模块化和可重用性 CSS 代码了。 小伙伴们,加油!!!

1.7K10

Webpack组件库打包超详细指南

打包配置 不同需求打包配置,放在不同文件中,是很好做法。 我们打包配置有一个基类文件,并根据不同打包需求,有不同子类文件——完整组件库打包、单个组件打包、打包示例工程。...require时模块名 libraryTarget: 'umd', umdNamedDefine: true // 会对 UMD 构建过程中 AMD 模块进行命名。...这与我们创建一个普通vue页面的操作是一样,具体配置可以看webpack.demo.js。 我们添加一个打包命令,用webpack-dev-server跑一个示例页面的服务。..."test": "webpack-dev-server --config build/webpack.demo.js --open --hot", 需要注意是,由于我们一开始是创建webpack-simple...文档生成 jsdoc 这里选择用jsdoc来自动生成文档(后续发现,这里直接用jsdoc生成文档比较不好看,示例不能清楚说明用法,缺少图片和GIF演示,jsdoc做为及时更新API文档是够用,但为了让库用户更方便入手

2.5K11

2021了,真的不要再说 Node.js 是一门编程语言了「建议收藏」

查看 Node 版本:node -v 查看 Npm 版本:npm -v 1.4 解决安装异常 解决在运行 node 命令时提示 “不是内部或外部命令, 也不是可运行程序或批处理文件”。.../logger") logger("Hello") 2.4 Module Wrapper Function Node.js 是如何实现模块,为什么在模块文件内部定义变量在模块文件外部访问不到?...在模块文件执行之前,模块文件中代码会被包裹在模块包装函数当中,这样每个模块文件中代码就都拥有了自己作用域,所以在模块外部就不能访问模块内部成员了。...它可以将 Node 软件包添加到我们应用程序中并对其进行管理,比如下载,删除,更新,查看版本等等。 它没有用户界面,需要在命令行工具中通过命令方式使用,对应命令就是 npm。...,npm 会自动创建

2.3K30

前端进阶

如果想开发更复杂基于Node.js应用程序后台,需要进一步学习Node.jsWeb开发相关框架 express,art-template、koa等 ES6概述 ? ?...build 模块化 简介 模块化产生背景 随着网站逐渐变成”互联网应用程序”,嵌入网页Javascript代码越来越庞大,越来越复杂。...Javascript模块化编程,已经成为一个迫切需求。理想情况下,开发者只需要实现核心业务逻辑,其他都可以加载别人已经写好模块。...') } export function save() { console.log('保存数据') } 3、创建 src/userComponent.js文件,导入模块 //只取需要方法即可.../userApi.js' getList() save() 注意:这时程序无法运行,因为ES6模块化无法在Node.js中执行,需要用Babel编辑成ES5后再执行。

1.4K10

npm 淘宝镜像使用

官方推荐做法,chown全称为change owner,即将npm目录所有者指定为你名字(授予权限),-R表示对指定目录下所有的子目录和文件也都采取同种操作。...然后将提示创建成功 非第一次发布包: 在终端输入npm login,然后输入你创建账号和密码,和邮箱,登陆 【注意】npm adduser成功时候默认你已经登陆了...,所以不需要再接着npm login....,撤销发布包被认为是一种不好行为 (试想一下你撤销了发布包[假设它已经在社区内有了一定程度影响],这对那些已经深度使用并依赖你发布团队是件多么崩溃事情!)...: 事实上npm更新包和发布包命令是一样,都是npm publish,不同之处在于,你需要修改包版本 所以步骤是: 1.修改包版本(

1.3K40

淘宝镜像错误导致vue项目一系列异常

2、还以为idea问题,idea外执行了其他命令,结果是更多错误了。比如“'vue' 不是内部或外部命令,也不是可运行程序或批处理文件。” ?...发生什么了,检查了node环境有没有问题,考虑是不是环境变量问题,找到vue.cmd路径,添加到path上,不好使,依然是一样错误提示。...直接重装执行命令, npm install -g vue。 ? 继续脚手架架安装 npm install -g @vue/cli,10分钟没有动静。...npm cache clean --force ,这个命令依然是同样遭遇,应该是更新源错误了。 ? 更换成淘宝镜像 npm config set registry,验证是否成功。 ?...重新打开idea后,发现啥问题都没有了,一路顺畅启动了,看来就是镜像问题,不知道啥时候给修改了,导致后面一系列问题,真的是自己挖坑自己跳。 ?

1.8K10

前端核心工具:yarn、npm、cnpm三者如何优雅在一起使用 ?

阅读本文大约需要 8 分钟 原文作者:Jerry谭金杰 一位用不好包管理器前端,是一个入门级前端,一个用不好 webpack 前端,是一个初级前端 三个包管理器是可以一起用,只要你够胆大心细,就没任何问题...虽然可以使用npm shrinkwrap来实现可预测依赖关系树,但它并不是默认选项,而是取决于所有的开发人员知道并且启用这个选项。 Yarn采取了不同做法。...每个yarn安装都会生成一个类似于npm-shrinkwrap.jsonyarn.lock文件,而且它是默认创建。...npm安装是非确定性程序包没有签名,并且npm除了做了基本SHA1哈希之外不执行任何完整性检查,这给安装系统程序带来了安全风险。...每次只要新增了一个模块,Yarn 就会创建(或更新)yarn.lock 这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用都是一样模块版本。

1.8K40

治理项目模块依赖关系,试试这艘「依赖巡洋舰」

随着项目规模庞大,文件层级与结构复杂度越来越高,模块关系混乱,循环依赖,反向依赖行为越来越多。 为了保持项目稳定和架构良好,需要进行模块依赖关系治理。...// 规则2 {...}, // 规则3 // ... ], options: { // ... } } 排除掉不太需要关心配置后,是不是看起来更清晰了?.../moduleA'; export default function moduleB() { return 'moduleB'; } moduleA(); 如果处理地不好,可能导致程序异常。...其他内置规则 内置规则除了「禁止循环引用」,还有: not-to-unresolvable:禁止引用不存在模块,这会导致程序出错。...return 'page A 下组件'; } 这样会导致两个页面纠缠不清,应该尽量避免。 正确做法应该是将用到公共模块放到更高层级 src/utils,页面从公共模块中引入。

1K20

RPC远程调用浏览器函数

比如有一个加密算法,如果要实现脱机(脱离当前环境)运行的话,就需要扣除相对应代码,补齐对应环境(模块,上下文,语言),然而要在补齐该加密算法环境可不好实现,而通过 RPC 则可以免除扣代码,通过数据通信来达到远程调用目的...Nodejs 实现 Websocket 服务端​ 安装 ws 模块npm install ws -S npm install @types/ws -D 这里之所以选 ws,是因为 ws 对于 Websocket...像上面例子的话,如果我程序要实现一个某度登录的话,那么我这个程序需要搭建一个 ws 服务器来进行两者通信,有没有好办法又不太依赖于 ws 服务端,就像 http 那样,程序需要发送一个请求,给定类型和数值进行加密处理后返回即可...如果我这边不采用 promise 来编写的话,那么获取到数据将十分不好返回给我们主线程。这里对于 js Promise 使用需要花费点时间去理解。...其实要实现也很简单,我只要把用户调用 getPasswordEnc 这个函数 弄到 node 创建一个 http 服务端就行了,我这里做法也是如此。

98120

yarn、npm、cnpm 三者如何优雅在一起使用 ?

原文作者:Peter谭金杰 前端巅峰 地址:https://segmentfault.com/a/1190000019299845 一位用不好包管理器前端,是一个入门级前端,一个用不好webpack...虽然可以使用npm shrinkwrap来实现可预测依赖关系树,但它并不是默认选项,而是取决于所有的开发人员知道并且启用这个选项。 Yarn采取了不同做法。...每个 yarn 安装都会生成一个类似于 npm-shrinkwrap.json yarn.lock 文件,而且它是默认创建。...npm 安装是非确定性程序包没有签名,并且 npm 除了做了基本 SHA1 哈希之外不执行任何完整性检查,这给安装系统程序带来了安全风险。...每次只要新增了一个模块,Yarn 就会创建(或更新)yarn.lock 这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用都是一样模块版本。

1.5K40

【Web技术】334- yarn、npm、cnpm 三者如何优雅在一起使用 ?

一位用不好包管理器前端,是一个入门级前端,一个用不好webpack前端,是一个初级前端 三个包管理器是可以一起用,只要你够胆大心细,就没任何问题!...虽然可以使用npm shrinkwrap来实现可预测依赖关系树,但它并不是默认选项,而是取决于所有的开发人员知道并且启用这个选项。 Yarn采取了不同做法。...每个 yarn 安装都会生成一个类似于 npm-shrinkwrap.json yarn.lock 文件,而且它是默认创建。...npm 安装是非确定性程序包没有签名,并且 npm 除了做了基本 SHA1 哈希之外不执行任何完整性检查,这给安装系统程序带来了安全风险。...每次只要新增了一个模块,Yarn 就会创建(或更新)yarn.lock 这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用都是一样模块版本。

72620

前端核心工具:yarn、npm、cnpm三者如何优雅在一起使用 ?

一位用不好包管理器前端,是一个入门级前端,一个用不好webpack前端,是一个初级前端 三个包管理器是可以一起用,只要你够胆大心细,就没任何问题!...虽然可以使用npm shrinkwrap来实现可预测依赖关系树,但它并不是默认选项,而是取决于所有的开发人员知道并且启用这个选项。 Yarn采取了不同做法。...每个yarn安装都会生成一个类似于npm-shrinkwrap.jsonyarn.lock文件,而且它是默认创建。...npm安装是非确定性程序包没有签名,并且npm除了做了基本SHA1哈希之外不执行任何完整性检查,这给安装系统程序带来了安全风险。...每次只要新增了一个模块,Yarn 就会创建(或更新)yarn.lock 这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用都是一样模块版本。

1.5K10

前端组件库打包利器rollup使用与配置实战

意思大致是说Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂代码,例如 library 或应用程序。...搭建库打包脚手架 1. rollup入门 首先我们安装一下rollup: npm i rollup -g 然后在本地创建一个项目: mkdir -p my-project cd my-project...2.rollup插件使用 为了更灵活打包库文件,我们可以配置rollup插件,比较实用插件有: rollup-plugin-node-resolve —帮助 Rollup 查找外部模块,然后导入 rollup-plugin-commonjs...需要注意是,我们设置"modules": false,否则 Babel 会在 Rollup 有机会做处理之前,将我们模块转成 CommonJS,导致 Rollup 一些处理失败。...在npm上也可以搜索到自己包: ? 是不是很有成就感呢?快让大家一起使用你开发包吧!

2.5K20

kbone,十分钟让 Vue 项目同时支持小程序

构建代码 接着,我们需要构建代码,让代码可以运行到各自运行环境中去。构建完成后,生产代码会位于 dist 目录中。 ? 小程序构建会比 Web 端构建多一个步骤,就是 npm 构建。...进入 dist/mp 目录,执行 npm install 安装依赖,用开发者工具将 dist/mp 目录作为小程序项目导入之后,点击工具栏下 构建 npm ,即可预览效果。...业界常见做法:将 Vue 模板直接转成小程序 WXML 模板 那么问题来了,如何将 Vue 代码转成小程序代码?这里先看下业界常见做法:将 Vue 模板直接转成小程序 WXML 模板。...使用做法相当于抛弃了浏览器中建 Dom 树过程,而是直接交由小程序来对模板进行编译创建出小程序模板树,进而渲染到小程序页面中。...一般来说这个做法对于普通场景是够用,但是对于一些更复杂场景就很不好处理了,比如社区中一个简单例子:社区帖子详情展示富文本内容,点击内容中图片可预览。

3K20

手把手教你编写Node.js模块

点击“博文视点Broadview”,获取更多书讯 编写稍复杂程序时,一般会先将代码模块化。...普通模块:提供API调用。 二进制模块:命令行工具,供CLI调用。 初始化模块 要想创建一个Node.js模块需要想清楚它名称、定位、功能。 首先,确认模块名称。...$ git clone xxx$ npm init -y package.json文件为模块描述文件,非常重要。一般会通过执行npm init命令来创建package.json文件。...在通过npm发布模块之前,需要注册npmjs账户。这里需要说明是,npm中有registry概念,也就是说,npmjs.com是官方源,但registry之间是不互通账户。...这样做好处是,逻辑代码都在index.js里,模块既可以是普通模块,也可以是二进制模块,这是Node.js中非常常见做法

94620

npm publish package 发布流程

这样方式实在是太费时费力了,还不好管理。后来就想着经常使用 npm package 是不是也可以将自己封装好包也放在上面进行管理呢?...package.js 中需要更改/添加以下配置信息 main 变更以 dist/ 为入口 index.js 文件 module 以 dist/ 为入口功能模块文件 unpkg 以 dist/ 为入口...05 - 模块化标准 目前我看到使用模块化标准主要分为2个流派,一个是 ES6 一个是 TypeScript。构建使用模块化打包工具中 rollup 是使用最多,一部分使用了 gulp。...@rollup/plugin-node-resolve 编译过程中帮助 rollup 查找外部模块并支持合并 rollup-plugin-flow-no-whitespace 编译过程中 将 flow...07 - 将包从 npm 上删除 // 需要先登录 npm unpublish 包名 // 即可将 npm包删除 error: cannot be republished until 24 hours

3K110

模块化方式构建Node.js应用程序

解决方案 一个更好方法是将应用程序设计为模块,例如DB,日志记录,错误等。假设你应用程序名称为cms,那么使用scope可以更容易地表示模块。...如果你应用程序需要日志记录模块npm install --save @cms/logging 如果你不想将应用程序分成几个部分,那么还有另一种方法。...因此,一旦所有其他节点模块被定义并且依赖关系被安装好了之后,它将创建从@cms文件夹外部到@cms文件夹内部node_modules链接。...所以你对外部@cms文件夹所做任何更改都将反映到文件夹内部node_modules。 ? 你可以看到我们对@cms安装了符号链接。这不是一个快捷文件,不是在Linux中使用“ln”创建硬链接。...在@cms内部,你可以看到我们在外部@cms文件夹中定义模块。 这样你就实现了模块化。“@cms”文件夹是你源代码一部分。然后你可以按正常方式导入所需模块

67530
领券