标签 nodejs 下的文章

在使用vueCli的脚手架工具创建完项目后,然后倒入模块的时候出现了error 'XXX' is defined but never used这样的错误,这是由于我们使用了eslint规范,ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误。这就导致了运行时候出现的错误。解决办法:

在package.json文件内加入如下代码:然后保存重启项目。

"rules": {
    "generator-star-spacing": "off",
    "no-tabs":"off",
    "no-unused-vars":"off",
    "no-console":"off",
    "no-irregular-whitespace":"off",
    "no-debugger": "off"
},

在使用npm安装包,以及使用cli脚手架创建项目的时候的时候出现了NPM Error:gyp: No Xcode or CLT version detected!这样的错误,而且一般发生在macOS Catalina系统中,不过项目可以继续运行,不过听有些大神说会影响效率,还是解决了比较好。解决办法:
使用xcode-select --install命令进行尝试修复,如果成功了就不用管了。

但是有时候会出现这样的错误
xcode-select: error: command line tools are already installed, use "Software Update" to install updates

解决办法,先卸载,再安装:

sudo rm -rf $(xcode-select -print-path)
xcode-select --install

有时候安装不上,但是系统就会提醒你升级,然后进行升级就可以了。完美解决。

  • 首先我们先来查看下版本

    npm -v
    node -v
  • npm的升级办法

     npm install npm@latest -g
  • node 的升级办法

    • 清除npm cache

      sudo npm cache clean -f
    • 安装 n 模块

      sudo npm install -g n
      • 安装最新的稳定版本(也可以自己选择版本sudo n 版本号)
       sudo n stable

在使用Vue-cli创建项目的时候,执行完vue create demo(你的项目名),就会出现以下错误

 vue create is a Vue CLI 3 only command and you are using Vue CLI 2.9.6.
 You may want to run the following to upgrade to Vue CLI 3:

 npm uninstall -g vue-cli
 npm install -g @vue/cli

这是由于Vue CLI 的包名称由 vue-cli 改成了 @vue/cli。 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm uninstall vue-cli -g 或 yarn global remove vue-cli 卸载它。

按照提示进行修改就可了,如果是mac操作系统,在命令行前面添加sudo获取管理员权限,输入管理员密码.

# 卸载以前装的vue-cli
npm uninstall -g vue-cli
# 安装vue/cli
npm install -g @vue/cli    或者    yarn global add @vue/cli

mac安装vue-cli的时候出现Error: EACCES: permission denied, access '/usr/local/lib/node_modules错的解决办法。

错误提示

pm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /usr/local/lib/node_modules/vue-cli/node_modules/ansi-escapes
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules/vue-cli/node_modules/ansi-escapes'
npm ERR!  [Error: EACCES: permission denied, access '/usr/local/lib/node_modules/vue-cli/node_modules/ansi-escapes'] {
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules/vue-cli/node_modules/ansi-escapes'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

原因: 权限不足。
解决办法: 在命令行前面添加sudo获取管理员权限,输入管理员密码就行sudo npm install -g vue-cli

第一步:安装

npm install --save art-template
npm install --save express-art-template

第二步:指定.html使用的解析引擎(官方给出的是art,自己开心就好)

app.engine('html', require('express-art-template'))

第三步:使用模板进行传值

app.get('/', function (req, res) {
    res.render('index.art', {
        user: {
            name: 'aui',
            tags: ['art', 'template', 'nodejs']
        }
    });
});

附录:官方示例

var express = require('express');
var app = express();
app.engine('art', require('express-art-template'));
app.set('view options', {
    debug: process.env.NODE_ENV !== 'production'
});

app.get('/', function (req, res) {
    res.render('index.art', {
        user: {
            name: 'aui',
            tags: ['art', 'template', 'nodejs']
        }
    });
});

小编在使用node的时候,在执行了npm init之后出现找不到C:\Program Files\nodejs\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js这个文件的错误,然后执行npm -v无解,还是出现同样的错误,对于刚刚接触node的小编来说真不知道怎么办了,简单粗暴点吧,卸载,重装。。。。。。结果依旧是悲剧的,打开之后还是不行,还是同样的错误。小编看了下的确没有这个文件,上网找了找解决方案,由于小编技术不好,没有找到。小编心想使用了这么多天都没出现问题,突然就不能使用了呢,会不会是系统原因,要不重启下吧,重启之后,小编发现还真可以使用了。虽然不知道为什么,但是问题解决了,希望知道原因的小伙伴告诉小编一下吧。

解决办法:重装重启电脑
很遗憾的告诉大家,小编重装系统了,又遇到了相同的问题,没有解决,解决的小伙伴,麻烦告诉下小编。
1.png

常用命令

npm是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,只要你安装了node就已经安装了npm,你可以通过npm --version来查看自己是否安装了npm,如果显示版本号,则证明已经安装了。如果想升级npm可以直接通过npm自己来升级npm install --global npm
常用命令:

  • npm init [-y] 生成package.json 包描述文件。其中的dependencies 选项的作用,可以帮我们保存第三方包的名字。如果删除了node_modules也不用担心,我们只需要执行npm install就可以把package.jsondependencies中所有的依赖全部下载下来。
  • npm install (npm i)一次性把dependencies中的全部的依赖项全部下载下来。
  • npm install (npm i 包名)把需要的包下载下来。
  • npm uninstall 包名(npm un [包名]) 删除下载的包。
  • npm update 包名 更新。
  • npm ls 列出当前安装的了所有包。
  • npm help 帮助,如果要单独查看某个命令的帮助,可以使用的npm help 命令名

解决npm被墙问题

方法一:
安装cnpm:npm install -g cnpm --registry=https://registry.npm.taobao.org
方法二:把下载源改了。

核心模块

  • 使用的时候就可以通过 require('包名') 的方式来进行加载才可以使用。
  • 核心模块的本质也是文件。
  • 核心模块文件已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了。

第三方模块

  • 凡是第三方模块都必须通过 npm 来下载。
  • 使用的时候就可以通过 require('包名') 的方式来进行加载才可以使用。
  • 注意:

    • 不可能有任何一个第三方包和核心模块的名字是一样的。
    • 第三方模块既不是核心模块、也不是路径形式的模块。
    • 它的加载原理如下:

      • 先找到当前文件所处目录中的 node_modules 目录(从该文件的位置开始,一层层的向上查询,直到找到该目录,或者找到磁盘根目录)。
    • 找到该模块的文件夹。
    • 找到该模块的文件夹内的package.json 文件。
    • 找到该模块的文件夹内的package.json 文件中的 main 属性。
    • main 属性中就记录了 art-template 的入口模块。
    • 然后加载使用这个第三方包,实际上最终加载的还是文件。
    • 如果 package.json 文件不存在或者 main 指定的入口模块是也没有,则 node 会自动找该目录下的 index.js,也就是说 index.js 会作为一个默认备选项。
    • 如果以上所有任何一个条件都不成立,则会进入上一级目录中的 node_modules 目录查找如果上一级还没有,则继续往上上一级查找。如果直到当前磁盘根目录还找不到,最后报错:can not find module xxx var template = require('art-template')
    • 我们一个项目有且只有一个 node_modules,放在项目根目录中,这样的话项目中所有的子目录中的代码都可以加载到第三方包,不会出现有多个 node_modules
    • 模块查找机制

      • 优先从缓存加载
      • 核心模块
      • 路径形式的文件模块
      • 第三方模块

非路径形式的模块标识(自己写的模块)

  • 路径形式的模块:

    • ./ 当前目录,不可省略
    • ../ 上一级目录,不可省略
    • /xxx 绝对路径,从该文件的磁盘根目录开始(几乎不用)
    • d:/a/foo.js 绝对路径(几乎不用)
    • 首位的 / 在这里表示的是当前文件模块所属磁盘根路径
    • .js 后缀名可以省略
  • 引入方式require('./foo.js')

  • 在 Node 中,每个模块内部都有一个自己的 module 对象。
  • module 对象中,有一个成员叫:exports 也是一个对象。
  • 我们可以把需要导出的成员都挂载到 module.exports 接口对象中,也就是:moudle.exports.xxx = xxx 的方式,但是每次都 moudle.exports.xxx = xxx 很麻烦,点儿的太多了,所以 Node 为了你方便,同时在每一个模块中都提供了一个成员叫:exports,也就是说:exports === module.exports 结果为 true,所以对于:moudle.exports.xxx = xxx 的方式 完全可以:expots.xxx = xxx。
  • 当一个模块需要导出单个成员的时候,这个时候必须使用:module.exports = xxx 的方式,不要使用 exports = xxx 不管用,因为每个模块最终向外 return 的是 module.exports。
  • exports 只是 module.exports 的一个引用。
  • 所以即便你为 exports = xx 重新赋值,也不会影响 module.exports,但是有一种赋值方式比较特殊:exports = module.exports 这个用来重新建立引用关系的。