Nodejs 系列一:开发环境篇

前言

本文是笔者所总结的有关 Nodejs 基础系列之一,

本文介绍如何搭建 Nodejs 的开发环境;经过对比,IntelliJ IDEA Ultra 是不二的选择,本文将立足于 IntelliJ IDEA Ultra 来构建 Nodejs 的开发环境;

注明:本文为作者的原创作品,转载需注明出处;

IntelliJ IDEA Ultra 破解安装

下载官方的 IntelliJ IDEA Ultra

从官网上 https://www.jetbrains.com/idea/download/ 下载 IntelliJ IDEA Ultra 版本;

破解步骤

该破解步骤需要的资源从 http://idea.lanyus.com 上下载,

  1. 下载 JetbrainsCrack-2.7-release-str.jar
  2. 将 JetbrainsCrack-2.7-release-str.jar 拷贝到路径 /Applications/IntelliJ IDEA.app/Contents/bin 中
  3. 修改 /Applications/IntelliJ IDEA.app/Contents/bin/idea.vmoptions 在最末尾添加如下一行,

    1
    -javaagent:JetbrainsCrack-2.7-release-str.jar
  4. 启动 IntelliJ IDEA,在注册页面输入 Activation Code

    1
    BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiQUMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IklJIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiUlMwIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiV1MiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJSQyIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IlBTIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiREMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJEQiIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9LHsiY29kZSI6IlJNIiwicGFpZFVwVG8iOiIyMDE3LTExLTIzIn0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTctMTEtMjMifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAxNy0xMS0yMyJ9XSwiaGFzaCI6IjQ3NzU1MTcvMCIsImdyYWNlUGVyaW9kRGF5cyI6MCwiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-iygsIMXTVeSyYkUxAqpHmymrgwN5InkOfeRhhPIPa88FO9FRuZosIBTY18tflChACznk3qferT7iMGKm7pumDTR4FbVVlK/3n1ER0eMKu2NcaXb7m10xT6kLW1Xb3LtuZEnuis5pYuEwT1zR7GskeNWdYZ0dAJpNDLFrqPyAPo5s1KLDHKpw+VfVd4uf7RMjOIzuJhAAYAG+amyivQt61I9aYiwpHQvUphvTwi0X0qL/oDJHAQbIv4Qwscyo4aYZJBKutYioZH9rgOP6Yw/sCltpoPWlJtDOcw/iEWYiCVG1pH9AWjCYXZ9AbbEBOWV71IQr5VWrsqFZ7cg7hLEJ3A==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==

    如图,将上面的激活码复制粘贴到下面的激活窗口中即可;
    register-activation-code-inputpanel.png

  5. 成功,可以看到激活时间是到 2099 年了,
    crack-activation-success.png

Nodejs 如何升级成最新的版本

我本地的 Nodejs 版本较旧,想安装成最新的版本;如何执行,参考 https://stackoverflow.com/questions/8191459/how-do-i-update-node-js

  1. 删除后安装指定版本

    1
    $ sudo npm cache clean -f
    1
    $ sudo npm install -g n

    这是安装最新版本

    1
    sudo n stable

    或者选择一个指定的版本进行安装,比如

    1
    sudo n 0.8.20
  2. brew upgrade node
    由于我本机并不是通过 brew 进行安装的,所以这种方式只能放弃

不过看到大多数主流派都建议使用 NVM 来管理 Nodejs 的版本和环境,所以,笔者将会在后续内容对 NVM 进行一系列的探究和整理;

搭建开发环境

Nodejs 环境安装篇

因为历史遗留的问题,我本机安装过 6.2.2,现在迫切的需要将老版本更新为新的版本 8.9.4,从 https://stackoverflow.com/questions/8191459/how-do-i-update-node-js 中可知,现在流行使用 nvm 来管理不同的 Node 版本的信息;(备注,使用 NPM 也可以升级 nodejs,参考 https://davidwalsh.name/upgrade-nodejs),

安装 nvm

nvm 的安装和使用参考 https://github.com/creationix/nvm

mac 上安装 nvm

不过 mac 系统中可以通过 brew 进行安装,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$ brew install nvm
Updating Homebrew...
==> Downloading https://github.com/creationix/nvm/archive/v0.33.8.tar.gz
==> Downloading from https://codeload.github.com/creationix/nvm/tar.gz/v0.33.8
######################################################################## 100.0%
==> Caveats
Please note that upstream has asked us to make explicit managing
nvm via Homebrew is unsupported by them and you should check any
problems against the standard nvm install method prior to reporting.

You should create NVM's working directory if it doesn't exist:

mkdir ~/.nvm

Add the following to ~/.bash_profile or your desired shell
configuration file:

export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"

You can set $NVM_DIR to any location, but leaving it unchanged from
/usr/local/opt/nvm will destroy any nvm-installed Node installations
upon upgrade/reinstall.

Type `nvm help` for further information.

Bash completion has been installed to:
/usr/local/etc/bash_completion.d
==> Summary
🍺 /usr/local/Cellar/nvm/0.33.8: 7 files, 135.5KB, built in 10 seconds

然后修改本地的 profile 信息,在 ~/.bash_profile 中添加如下的信息,

1
2
export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"

然后执行

1
$ source ~/.bash_profile

Linux 系统上安装 NVM

https://hexo.io/docs/

cURL

1
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

Wget

1
$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

安装最新版本的;

1
$ nvm install stable

使用 NVM 安装 Nodejs

如何使用 nvm 安装 nodejs 参考 https://davidwalsh.name/nvm ,下面笔者将使用 nvm 安装当前的 nodejs LTS 版本 8.9.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ nvm install 8.9.4
Downloading and installing node v8.9.4...
Downloading https://nodejs.org/dist/v8.9.4/node-v8.9.4-darwin-x64.tar.gz...
## 4.2%
curl: (56) LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
Binary download from https://nodejs.org/dist/v8.9.4/node-v8.9.4-darwin-x64.tar.gz failed, trying source.
grep: /Users/mac/.nvm/.cache/bin/node-v8.9.4-darwin-x64/node-v8.9.4-darwin-x64.tar.gz: No such file or directory
Provided file to checksum does not exist.
Binary download failed, trying source.
Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!
Downloading https://nodejs.org/dist/v8.9.4/node-v8.9.4.tar.gz...
# 1.9%
curl: (56) LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
Binary download from https://nodejs.org/dist/v8.9.4/node-v8.9.4.tar.gz failed, trying source.
grep: /Users/mac/.nvm/.cache/src/node-v8.9.4/node-v8.9.4.tar.gz: No such file or directory
Provided file to checksum does not exist.

不过不幸的是,安装了很多次都报如上的错误,很显然是在下载文件的时候出现了网络错误,导致文件下载不成功;于是手动拷贝 https://nodejs.org/dist/v8.9.4/node-v8.9.4-darwin-x64.tar.gz 到浏览器下载,然后将文件拷贝到 /Users/mac/.nvm/.cache/bin/node-v8.9.4-darwin-x64/ 目录中,再执行上述的安装命令,就不会从网上去下载了,而是直接使用本地的安装文件,

1
2
3
4
5
6
$ nvm install 8.9.4
Downloading and installing node v8.9.4...
Local cache found: $NVM_DIR/.cache/bin/node-v8.9.4-darwin-x64/node-v8.9.4-darwin-x64.tar.gz
Checksums match! Using existing downloaded archive $NVM_DIR/.cache/bin/node-v8.9.4-darwin-x64/node-v8.9.4-darwin-x64.tar.gz
Now using node v8.9.4 (npm v5.6.0)
Creating default alias: default -> 8.9.4 (-> v8.9.4)

检查当前 Nodejs 版本

1
2
$ node -v
v8.9.4

可见当前的终端已经默认切换为使用 8.9.4 版本了;不过,要注意,这个也只是限于当前的终端有效,我 hexo 目录的终端使用的依然是 6.6.2,

1
2
$ node -v
v6.2.2

这个时候需要使用命令

1
$ nvm use 8.9.4

进行显式的切换,注意如果本地值安装了一个 8.x 版本可以直接使用

1
$ nvm use 8

来进行切换;然后启动我的博客,

1
2
3
4
5
6
$ hexo server --draft
Error: The module '/usr/local/lib/node_modules/hexo-cli/node_modules/dtrace-provider/build/Release/DTraceProviderBindings.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 48. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).

可见报错,使用了不同版本的 node,但是最终博客还是依然启动成功;但是为了避免引起未知的问题,还是将 Node 切换为 6.2.2;但是因为 6.2.2 不是通过 nvm 安装的,所以切换回报错,

1
2
macdeMacBook-Pro:www.shangyang.me mac$ nvm use 6.2.2
N/A: version "6.2.2 -> N/A" is not yet installed.

那么现在只能试图修复这个错误了,

1
$ npm rebuild

不过运行了一晚上没有成功,于是使用 nvm 以安装 8.9.4 的相同的方式安装 6.2.2,仍然报下面相同的错误,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
$ hexo server --draft
{ Error: Cannot find module './build/Release/DTraceProviderBindings'
at Function.Module._resolveFilename (module.js:440:15)
at Function.Module._load (module.js:388:25)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/mac/blog/www.shangyang.me/node_modules/dtrace-provider/dtrace-provider.js:17:23)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/mac/blog/www.shangyang.me/node_modules/bunyan/lib/bunyan.js:79:18)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/mac/blog/www.shangyang.me/node_modules/hexo-log/lib/log.js:3:14)
at Module._compile (module.js:541:32) code: 'MODULE_NOT_FOUND' }
{ Error: Cannot find module './build/default/DTraceProviderBindings'
at Function.Module._resolveFilename (module.js:440:15)
at Function.Module._load (module.js:388:25)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/mac/blog/www.shangyang.me/node_modules/dtrace-provider/dtrace-provider.js:17:23)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/mac/blog/www.shangyang.me/node_modules/bunyan/lib/bunyan.js:79:18)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/mac/blog/www.shangyang.me/node_modules/hexo-log/lib/log.js:3:14)
at Module._compile (module.js:541:32) code: 'MODULE_NOT_FOUND' }
{ Error: Cannot find module './build/Debug/DTraceProviderBindings'
at Function.Module._resolveFilename (module.js:440:15)
at Function.Module._load (module.js:388:25)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/mac/blog/www.shangyang.me/node_modules/dtrace-provider/dtrace-provider.js:17:23)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/mac/blog/www.shangyang.me/node_modules/bunyan/lib/bunyan.js:79:18)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/mac/blog/www.shangyang.me/node_modules/hexo-log/lib/log.js:3:14)
at Module._compile (module.js:541:32) code: 'MODULE_NOT_FOUND' }

然后 Google 直接搜索这个错误,https://github.com/hexojs/hexo/issues/1922 解决方法是,将 Node 和 Hexo 全部使用最新的版本,升级 hexo 的方法

1
$ npm install hexo --no-optional

再次执行,

1
2
3
4
5
6
7
8
$ hexo server --draft
(node:15925) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated.
INFO [hexo-math] Using engine 'mathjax'
INFO Start processing
encrypt the blog :javascript 函数
encrypt the blog :我的第一个爬虫 Demo 一:“餐饮”职位列表页面
encrypt the blog :javascript 面向对象编程
INFO Hexo is running at http://localhost:4000/. Press Ctrl+C to stop.

成功了,不过日志也少了很多;升级以后问题是 math 公式全部失效了,OK,这部分是因为 mathjax 老的 CDN 服务器迁移了的原因,导致 mathjax 的 CSS 语法加载不了所导致的,只需要更改 mathjax 的 CDN 为新的 CDN 地址即可,这部分内容参考笔者的 hexo 使用总结博文;

Node 和 Hexo 一同升级以后,性能上快了许多;Ok,至此,我本机的 Nodejs 的环境通过 NVM( Node Version Management ) 总算是规范化了,下面看看

卸载 Nodejs

https://stackoverflow.com/questions/11177954/how-do-i-completely-uninstall-node-js-and-reinstall-from-beginning-mac-os-x

  1. go to /usr/local/lib and delete any node and node_modules
  2. go to /usr/local/include and delete any node and node_modules directory
  3. if you installed with brew install node, then run brew uninstall node in your terminal
  4. check your Home directory for any local or lib or include folders, and delete any node or node_modules from there
  5. go to /usr/local/bin and delete any node executable

上面是指常规的安装方式既是不适用 NVM 的安装 Nodejs 以后的卸载的方式,如果使用 NVM 来管理 Node 环境,那么就简单许多了,

IntellJ IDEA 配置

安装 Nodejs 开发的 Plugin

  1. 启动 IntellJ IDEA,然后进入 plugins
    idea-plugins-entrance-01.png
  2. 点击 Install JetBrains Plugin…
  3. 输入 Node
    idea-plugins-nodejs.png
    可以看到总共出现了两个 Nodejs 相关的 plugin,一个是 Node.js Remote Interceptor,从描述中可以看到,该 plugin 的主要功能是允许本地连接远程的 Nodejs 服务器进行调试,这个功能应该比较强大,不过暂时不需要;我们选择 NodeJS plugin,然后点击右上角 Install 按钮进行安装;
  4. 重启 IntellJ IDEA
  5. 可以看到在新建项目的时候,出现了 Node.js 和 NPM 选项表示 nodejs plugin 安装成功
    idea-plugins-nodejs-success.png

Nodejs 工程

新建工程

  1. 新建 Nodejs 项目,在创建工程的时候会默认使用 JADE 作为 Nodejs 的网页模板生成器,这里可以选择成最适应自己项目的模板,同样,会默认使用 Express 4.15.5;注意 Nodejs 默认使用的是 8.9.4
    idea-nodejs-project-creation-template-choose.png
  2. 创建成功以后的项目骨架如图,
    idea-nodejs-project-creation-success.png

工程的基本配置

  1. Preferences $\to$ Language & Frameworks $\to$ Node.js and NPM
    idea-nodejs-basic-env-configure.png
  2. 点击右上角的三个点的按钮,可以选择 Node 解释器也就是 Node Interpreter
    idea-nodejs-basic-env-configure-2.png
  3. 可以根据需要通过 + 按钮可以新增诸如 Express 这样的模块;

enable node.js interpreter

有时候,一个老的项目,当时配置一切正常的,但是在重新打开该工程以后,却不是 Node.js 的项目了,配置都一切正常,这个时候,多半的原因是没有 enable node.js 解释器所导致的,
idea-how enable nodejs interpreter.png
如图,点击 enable,然后在弹出框中点击 configure 即可;这样便便表示,使用 Node.js 环境来编译此工程,否则会出现一系列的编译错误,比如 Unresolved function or method for require()

常用设置

快捷键

常用快捷键设置

idea-commons-shortcuts-settings.png

常用快捷键整理

CMD + “+/-“:单个方法的展开和折叠
CMD + SHIFT + “+/-“:全局方法的展开和折叠
CMD + 7:展示 outline 视图
CMD + F12:悬窗展示 outline 视图,类似于 Eclipse 中点击 CMD + O 的视图方式;
idea-commons-shortcuts-structures-overview.png
可以看到,窗口展示所有的相关快捷键;

调试

点击左下角的按钮,便会弹出调试窗口;

debug-dialog-window.png

File Types

有时候,一些 IDEA 不能识别的后缀名的文件,IDEA 会提示选择用什么样的编译器来进行打开,一旦选择错误以后,会导致编译错误;比如,在使用 dotenv 定义了一个 .env 的文件,IDEA 不能识别,结果我错误的选择使用 TypeScript 来进行编辑,结果导致整个项目构建失败,报错;那么怎么修复它呢?如图,
idea file types settings.png
去掉 .env 就好了;

Bookmark

有时候,代码分散在各个地方,很难迅速的找到各个地方散落的代码,这个时候,Bookmarks 就能起到关键性的作用了;

  1. 如何创建 Bookmark,
    首先,选中需要创建 Bookmark 的代码行,
    然后,choose Navigate | Bookmarks | Toggle Bookmark With Mnemonic on the main menu,该步骤也可以通过快捷键 CMD + F11 完成,
    然后,press one of the keys 0-9 or A-Z,便生成了相应的 Bookmark,如图,
    idea bookmarks 01.png
    并且在 idea 的最右边,生成了一个可以点击的快捷键图标;
  2. 删除 Bookmark,直接在复选 Toggle Bookmark With Mnemonic 即可,或者直接点击 CMD + F11 快捷键;
  3. 快速查看所有的 Bookmark,choose Navigate | Bookmarks | Show Bookmarks,或者点击 Shift + F11
  4. 如何快速切换至某个 Bookmark
    • Ctrl + Num
      如果 Bookmark 是使用数字作为标记的,那么可以直接使用 Ctrl + Num 快速定位到指定的代码区间;不知道是不是 bug,ctrl + 1 不起作用?其它的都 Ok
    • Navigate to Next
      Navigate | Bookmarks | Next Bookmarks,可惜,该操作目前没有看到快捷键设置;使用 Ctrl + Num 的方式吧!
    • 或者可以 cmd + 2 快速的显示 Favorites 窗口,然后在其中可以快速的点选某个 Bookmark,如图,
      idea bookmarks in favorites.png

Reference: https://www.jetbrains.com/help/idea/managing-bookmarks.html

常见错误

Destructuring assignments are not supported

当在 javascript 代码中写如下的代码的时候,

1
const { spawn } = require('child_process');

会报这样的错误,Destructuring assignments are not supported by current JavaScript version
,从 https://stackoverflow.com/questions/37688587/destructuring-assignments-are-not-supported-by-current-javascript-version 中可知,这是 ECMAScript 6 的语法,需要在 IDEA 中切换,
idea-choose-ecmascript-6.png
点击应用,确定即可修复该错误;

Waiting for the debugger to disconnect…

1
2
3
const circle = require('./modules/circle.js');

console.log(`The area of a circle of radius 4 is ${circle.area(4)}`);

当我把断点打在上述的第一行代码中的时候,反复报错,调试不成功,如下,

1
2
3
const circle = require('./modules/circle.js');

console.log(`The area of a circle of radius 4 is ${circle.area(4)}`);

有些人说是因为 IDEA 2017.03 这个版本的 bug 有些人说是 Node 8 的 bug,原本以为是有某个调试进程没有退出,但是在我重启电脑以后依然报这个错误,这就非常的奇怪了;不管是什么原因造成的,我想知道的是解决办法,结果,出乎我的意料的是,我在第一行之前添加一行新的代码,像下面这样,调试居然就启动了… 我一脸茫然…
fixes the debug error - waiting for debug disconnect.png

禁用 ESLint

有时候一些正常的代码也会误报错误,一下代码在开启了 ECMAScript 6 以后仍然报错,
idea-unexpected-compile-errors.png
解决办法是禁用 ESLint 验证,如图,将 Enable 的勾去掉;
idea-disable-eslint.png

References

https://www.jetbrains.com/help/idea/node-js.html