JS在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
九宫格按键输入(用map保存字母模式下的输入顺序,用栈保存字母模式下输入的相同数字,然后对输入字符串进行逻辑判断:如果是#,当前为字母模式时,需要清空栈并输出一个字母,然后切换模式;当输入的是数字时,如果是字母模式,,如果遇到和栈顶不同的数字或/,就清空栈,然后输出一个字母。否则就需要将这个数字压入栈。再输入元素的结尾放一个空格,增加一个else输出逻辑,确保最后一定能清空栈顶元素并输出字母) 发布于:2025-03-26 18:58 【最大值】(自定义排序,如果看a b组成的数字,如果a+b大,a排在B前面。否则b排在a前面) 发布于:2025-03-26 17:57 计算疫情扩散时间(多源图的层序bfs:先初始化矩阵,将矩阵内1的下标入队。然后bfs,bfs时,先遍历当前队列,对当前队列的每一组坐标,判断每一个偏移量处是否为未感染,如果未感染就感染;并将新的偏移坐标入队。循环过当前的size后,stime++。最后输出time) 发布于:2025-03-26 17:49 【火锅】吃到最多刚好合适的菜(把数组整合成第i秒能吃到这个菜,然后拿第一个菜,后面的菜用pre代表前一个菜拿的时间,如果suit[i]-pre>=m,可以拿,ans++) 发布于:2025-03-26 17:28 云短信平台优惠活动(完全背包问题) 发布于:2025-03-26 16:55 寻找符合要求的最长子串(滑动窗口:当右指针指向为数字时,r++,用letterNum记录子串内letter的数量,当letterNum>1时,开始收缩左窗口,直到letterNum==1;收缩完成后,更新最大值,然后重新开始滑动右指针) 发布于:2025-03-26 16:40 计算网络信号(先把arr转换成矩阵。再遍历矩阵,找到信号源,放入starts,然后对每一个starts都进行一遍bfs。bfs算法中,定义一个queue,将[x,y]作为初始bfs节点。每次都shift出节点每次向上下左右四个节点进行寻找。每次搜索matrix[newX][newY]--;如果这个值大于0,将[newX,newY]放入到queue中。) 发布于:2025-03-26 16:16 最长方连续方波信号(先将输入的字符串截断,当连续出现两个0时就把第二个0之前的部分截断。内置临时变量i,当i等于字符串的长度的时候停止循环;然后再对每一个有效字符(长度大于1)的进行判断,将符合条件的提取出来,最后再按照长度排序) 发布于:2025-03-26 15:25 【学生方阵】(暴力破解,分别对周围8个方向进行查找) 发布于:2025-03-26 15:03 树状结构查询(用map模拟树结构,将每一个父亲节点都放到map.get中,然后对map进行dfs遍历) 发布于:2025-03-26 14:50 【数字游戏】(双循环暴力破解) 发布于:2025-03-26 14:32 字符串化繁为简(先对字符串进行预处理:将每一个()内的字母都放入一个集合中,然后把不在()内的字母单独放到一个str中;然后对每一个set进行合并操作:循环这个集合数组,每次进行两两比较,如果这两个集合中的任意一个字母或他对应的大写字母在另一个集合中也出现过,那么这两个集合就能够合并。将合并之后的新集合放到数组中并重新开始循环,直到循环两次后没有任何数组能够合并。集合合并过后就对原字符串进行操作,对每一个字母在集合中进行比对,如果在任意一个集合中,就替换成这个集合中的那个字典排序最小的那个。))(暴力解法75%通过率) 发布于:2025-03-25 17:50 【找单词】(bfs:对matrix内的每个元素与word[k]进行比对,当比对结果正确时将(i,j)放入path中,将used[i,j]==true并对[i,j]四周[i-1,j][i+1,j][i,j-1][i,j+1]进行dfs。如果结果均为false,path弹出,used[i,j]还原为false;如果path的长度等于word的长度,说明找到了结果,直接return true。对矩阵中的每个元素都进行一次dfs,找到正确的值后直接return console.log(path.join(',')) 发布于:2025-03-25 16:40 文本统计分析(输入处理;转义字符处理;) 发布于:2025-03-25 15:43 模拟目录管理功能(用多叉树模拟文件管理) 发布于:2025-03-24 19:02 项目排期(二分+回溯) 发布于:2025-03-24 18:16 【跳格子3】(动态规划:dp[i]=Math.max(dp[i-k]-dp[i-1])+scores[i]) 发布于:2025-03-24 17:17 中文分词模拟器(将words中的所有元素放入集合中,从sentenes中的每个sentence开始查找,从sentence本身开始查,然后一个字母一个字母的缩小,查到words中有sentence.slice(0,r)时,如果r<sentence.length,就将sentence截断,截断后的新sentence放到sentences的队首。如果一直检查到结尾都没有,那就将首字母截断,将剩余的放入队首重新检查) 发布于:2025-03-24 16:55 二叉树计算 发布于:2025-03-24 16:38 电脑病毒感染(单元最短路径求解: dijkstra算法:用group将所有路径都储存起来;定义visited数组记录已经访问过的节点,dist记录到节点i的最短路径长度;定义一个数组queue,将图的初始节点记录,循环queue,每次推出栈顶元素[u,dist];如果visited[u]==true,代表这个元素已经访问过,continue;否则,从图中找出所有和u相关的路径[u,v,w],dist[u]+w就是从原点到节点v的距离newDist,将这个newdist和dist[v]比较,如果小于dist[v]则更新dist[v]。并将这个节点推入queue中。进行过一次while循环就重新对queue数组排序,确保栈顶元素是最小值) 发布于:2025-03-24 15:49 爱吃蟠桃的孙悟空(二分法,min==1 max==Math.max(...arr) 计算吃完花费的时间,cost<=H?mid = max-1:mid = min+1) 发布于:2025-03-24 14:58 模拟商场优惠打折(自定义排序+自定义算法) 发布于:2025-03-21 18:03 开心消消乐(就是孤岛数量,bfs) 发布于:2025-03-21 16:39 【事件推送】(因为是升序数组,直接双指针,每当符合条件的数字对存在时让指向第一个元素的+1,否则就另一个+1) 发布于:2025-03-21 16:20 按单词下标区间翻转文章内容(字符串反转,简单的数组反转) 发布于:2025-03-21 16:10 太阳能板最大面积(取左边和右边最小的板为高,两坐标差为宽相乘;并移动短板,知道i==j) 发布于:2025-03-21 15:49 相对开音节(正则解法:判断是否带数字和符号正则:/[^a-z]/;元音正则:[aeiou]辅音正则:[^aeiou]) 发布于:2025-03-20 19:14 最大括号深度(左括号入栈并检查深度,右括号比较栈顶是否为对应的左括号,不是返回0,是出战继续) 发布于:2025-03-20 18:38 最多提取子串数目(逻辑分析:将A中出现的每一个B中的字母进行计数,使用一个集合idx记录b中每个字母的下标;在使用一个集合count记录扫描A时B中每个元素的次数;扫描一遍A的字母c,如果idx[c]!==undefined&&count[idx[c]]<count[idx[c]-1) count[idx[c]++];取count中最后一个元素的值,就是出现的次数 发布于:2025-03-20 18:28 比赛的冠亚季军(// 初始栈放入所有人的编号;// 用栈模拟:不断向stack中插入win lost数组,当stack[stack.length-1]的长度为1时,就已经选出了冠军\) 发布于:2025-03-20 17:59 任务总执行时长(两种任务,一共i个,求所有可能的排列组合) 发布于:2025-03-20 17:08 完全二叉树非叶子部分后序遍历(用数组模拟完全二叉树:lchild=root*2+1,rchild=root*2+2;用dfs遍历二叉树;当左子树不为空时继续遍历左子树了又子树不为空时继续遍历右子树,最后将root放入ans) 发布于:2025-03-20 16:59 工程:多工程少天数时数组排列 发布于:2025-03-20 17:36 【寻找密码】(先按照字符串长度和字典顺序排序,将所有字符串都放入set中 排序后的对每一个字符串进行循环,从最后一位开始切割,如果每一个子串都能在set中找到,那么这个字符串就是答案) 发布于:2025-03-20 16:39 字符串解密(用正则把字符串分割,分割后在的子数组排序,找到不同字母最接近目标字符串的) 发布于:2025-03-20 16:27 最长的顺子(map记录每一张牌的剩余数量,用双指针选出数量每一个连成顺子的长度以及下标,如果长度大于5就选出这个下标中长度最大的) 发布于:2025-03-20 15:50 寻找关键钥匙(字符串操作 找出所有字母后升序) 发布于:2025-03-20 15:47 外卖员跑单组合(回溯) 发布于:2025-03-20 14:35 【洪水救援】(双指针一个指向队头一个指向队尾,判断arr[i]+arr[j]是否大于limit,如果大于就j-- ans++ 否则就i++ j-- ans++) 发布于:2025-03-20 14:14 事件监听时间 发布于:2025-03-19 23:49 堆内存申请(自定义used数组,按照输入把使用过的填false 然后找到连续的true数组,比较,如果和输入大小最接近,返回l) 发布于:2025-03-19 20:02 最远足迹(字符串操作,匹配括号内的数组数据) 发布于:2025-03-19 19:43 倒 N 形走位(逻辑分析:let reverse = true; for (let i = 0; i < x; i++) { let k = i % n; if (k == 0) reverse = !reverse; if (reverse) k = n - 1 - k; matrix[k].push(i + 1); }) 发布于:2025-03-19 19:34 【木板】最短木板的长度最大可以为多少(补充木板不为0一直循环;从第二根开始,如果比前一根长,就在前一根上+1;如果一直到最后都一样长,在在最后一个+1并重新开始循环,直到m用光) 发布于:2025-03-19 19:26 最大矩阵和(将矩阵的每一行都求一遍最大子数组的和,然后从第二行开始,将i+1-N行的数都压缩到第i行后分别求最大子数组的和) 发布于:2025-03-19 19:16 求最多可以派出多少支团队(单独组队的挑出去后排序,剩下的双指针 一个指向队尾一个指向队头,如果>=min就++ l++r--;小于就l++) 发布于:2025-03-19 18:37 AI识别(逻辑分析 自定义排序(灯的半径 左边 idx排序)) 发布于:2025-03-19 18:07 分奖金(暴力破解-双循环) 发布于:2025-03-19 18:06 【计算最接近的数】(滑动窗口) 发布于:2025-03-18 19:44 【抓阄游戏】(字符串自定义排序) 发布于:2025-03-18 19:15 [更多]
显示目录

NPM 使用介绍



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

NPM 使用介绍

本文介绍了 Node.js 中 NPM 的使用,我们先来了解什么是 NPM。

NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入

"npm -v"

来测试是否成功安装。命令如下,出现版本提示表示安装成功:

$ npm -v 2.3.0

如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下:

$ sudo npm install npm -g /usr/local/bin/npm -> 
/usr/local/lib/node_modules/npm/bin/npm-cli.js
npm@2.14.2  /usr/local/lib/node_modules/npm

如果是 Window 系统使用以下命令即可:

npm install npm -g

全局安装与本地安装

npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如

npm install express          # 本地安装
npm install express -g   # 全局安装

如果出现以下错误:

npm err! Error: connect ECONNREFUSED 127.0.0.1:8087

解决办法为:

$ npm config set proxy null

本地安装

  • 1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
  • 2. 可以通过 require() 来引入本地安装的包。

全局安装

  • 1. 将安装包放在 /usr/local 下或者你 node 的安装目录。
  • 2. 可以直接在命令行里使用。

如果你希望具备两者功能,则需要在两个地方安装它或使用 npm link。

NPM 应用

NPM建立了一个NodeJS生态圈,NodeJS开发者和用户可以在里边互通有无。以下介绍NPM应用的三种场景:

下载第三方包

我们可以使用以下命令来下载第三方包。

$ npm install argv
...
argv@0.0.2 node_modules\argv

下载好之后,argv包就放在了工程目录下的node_modules目录中,因此在代码中只需要通过require('argv')的方式就好,无需指定第三方包路径。

以上命令默认下载最新版第三方包,如果想要下载指定版本的话,可以在包名后边加上@<version>,例如通过以下命令可下载0.0.1版的argv。

$ npm install argv@0.0.1
...
argv@0.0.1 node_modules\argv

NPM对package.json的字段做了扩展,允许在其中申明第三方包依赖。因此,上边例子中的package.json可以改写如下:

{
    "name": "node-echo",
    "main": "./lib/echo.js",
    "dependencies": {
        "argv": "0.0.2"
    }
}

这样处理后,在工程目录下就可以使用npm install命令批量安装第三方包了。

更重要的是,当以后node-echo也上传到了NPM服务器,别人下载这个包时,NPM会根据包中申明的第三方包依赖自动下载进一步依赖的第三方包。

例如,使用npm install node-echo命令时,NPM会自动创建以下目录结构。

- project/
    - node_modules/
        - node-echo/
            - node_modules/
                + argv/
            ...
    ...

如此一来,用户只需关心自己直接使用的第三方包,不需要自己去解决所有包的依赖关系。

安装命令行程序

从NPM服务上下载安装一个命令行程序的方法与第三方包类似。

例如上例中的node-echo提供了命令行使用方式,只要node-echo自己配置好了相关的package.json字段,对于用户而言,只需要使用以下命令安装程序。

$ npm install node-echo -g

参数中的-g表示全局安装,因此node-echo会默认安装到以下位置,并且NPM会自动创建好Linux系统下需要的软链文件或Windows系统下需要的.cmd文件。

- /usr/local/               # Linux系统下
    - lib/node_modules/
        + node-echo/
        ...
    - bin/
        node-echo
        ...
    ...

- %APPDATA%\npm\            # Windows系统下
    - node_modules\
        + node-echo\
        ...
    node-echo.cmd
    ...

发布代码

第一次使用NPM发布代码前需要注册一个账号。终端下运行npm adduser,之后按照提示做即可。

账号注册完成后,接着我们需要编辑package.json文件,加入NPM必需的字段。接着上边node-echo的例子,package.json里必要的字段如下。

{
    "name": "node-echo",           # 包名,在NPM服务器上须要保持唯一
    "version": "1.0.0",            # 当前版本号
    "dependencies": {              # 第三方包依赖,需要指定包名和版本号
        "argv": "0.0.2"
      },
    "main": "./lib/echo.js",       # 入口模块位置
    "bin" : {
        "node-echo": "./bin/node-echo"      # 命令行程序名和主模块位置
    }
}

之后,我们就可以在package.json所在目录下运行npm publish发布代码了。


版本号

使用NPM下载和发布代码时都会接触到版本号。NPM使用语义版本号来管理代码,这里简单介绍一下。

语义版本号分为X.Y.Z三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。

  • 如果只是修复bug,需要更新Z位。
  • 如果是新增了功能,但是向下兼容,需要更新Y位。
  • 如果有大变动,向下不兼容,需要更新X位。

版本号有了这个保证后,在申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。例如"argv": "0.0.x"表示依赖于0.0.x系列的最新版argv。


NPM常用命令

除了本章介绍的部分外,NPM还提供了很多功能,package.json里也有很多其它有用的字段。

除了可以在npmjs.org/doc/查看官方文档外,这里再介绍一些NPM常用命令。

NPM提供了很多命令,例如install和publish,使用npm help可查看所有命令。

  • NPM提供了很多命令,例如install和publish,使用npm help可查看所有命令。

  • 使用npm help <command>可查看某条命令的详细帮助,例如npm help install。

  • 在package.json所在目录下使用npm install . -g可先在本地安装当前命令行程序,可用于发布前的本地测试。

  • 使用npm update <package>可以把当前目录下node_modules子目录里边的对应模块更新至最新版本。

  • 使用npm update <package> -g可以把全局安装的对应命令行程序更新至最新版。

  • 使用npm cache clear可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。

  • 使用npm unpublish <package>@<version>可以撤销发布自己发布过的某个版本代码。

由JSRUN为你提供的JS在线运行、在线编译工具
        JSRUN提供的JS 在线运行,JS 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout