在使用c9.io时默认的node.js版本是v0.10.35,使得一些模块安装警告版本过低,而执行命令时报错。 Module build failed: ReferenceError: Promise is not defined
问题表现
$ webpack
Hash: c978ec3fee3b9d59c3b7
Version: webpack 1.12.2
Time: 1263ms
Asset Size Chunks Chunk Names
bundle.js 9.04 kB 0 [emitted] main
[0] ./src/entiry.js 94 bytes {0} [built]
[1] ./src/content.js 45 bytes {0} [built]
+ 3 hidden modules
ERROR in ./~/css-loader!./src/style.css
Module build failed: ReferenceError: Promise is not defined
at LazyResult.async (/home/ubuntu/workspace/node_modules/css-loader/node_modules/postcss/lib/lazy-result.js:152:31)
at LazyResult.then (/home/ubuntu/workspace/node_modules/css-loader/node_modules/postcss/lib/lazy-result.js:75:21)
at processCss (/home/ubuntu/workspace/node_modules/css-loader/lib/processCss.js:174:5)
at Object.module.exports (/home/ubuntu/workspace/node_modules/css-loader/lib/loader.js:22:2)
@ ./src/style.css 4:14-76
问题原因
安装的node.js版本过低,而css-loader依赖的postcss插件最低node.js版本要求是0.12.故引起webpack执行报错。
如何解决
根本要升级node.js版本,那么如何升级nodejs呢
升级nodejs
nodejs非常活跃,更新频繁,我们可以直接使用nodejs的版本管理器nvm
进行更新,同时可以非常方便的进行版本切换。
安装nodejs版本管理器nvm(相比你机器已经安装了npm)
$ npm install -g nvm
查看当前node的版本情况
$ nvm ls
iojs-v1.7.1
v0.6.21
v0.8.28
-> v0.10.35
v0.11.14
system
default -> 0.10.35 (-> v0.10.35)
node -> stable (-> v0.12.7) (default)
stable -> 0.12 (-> v0.12.7) (default)
unstable -> 0.11 (-> v0.11.14) (default)
iojs -> iojs-v1.7 (-> iojs-v1.7.1) (default)
此时,我们看到本地nodejs版本最高是v0.11.14,环境使用的版本是v0.10.35.而非v0.12.7,故需要先下载最新版本后,再切换环境版本。
- 下载指定nodejs版本
$ nvm install 0.12.7
######################################################################## 100.0%
Now using node v0.12.7
laoyu@nodestudy:~/workspace $ nvm ls
iojs-v1.7.1
v0.6.21
v0.8.28
v0.10.35
v0.11.14
-> v0.12.7
system
default -> 0.10.35 (-> v0.10.35)
node -> stable (-> v0.12.7) (default)
stable -> 0.12 (-> v0.12.7) (default)
unstable -> 0.11 (-> v0.11.14) (default)
iojs -> iojs-v1.7 (-> iojs-v1.7.1) (default)
通过nvm可以下载安装不同nodejs版本,0.12.7
即为版本号。如果想下载最新版本,可以执行如下命令来获取。
$ nvm install stable
切换环境中的node版本
实际上在使用
nvm install
命令时便已切换环境node版本,如上一步便可知道。但有时候你需要切换环境node版本时,便可使用下面命令来切换。$ nvm use 0.12.7
上面就是是环境版本切换到刚下载的版本0.12.7.
检查新node版本是否工作正常
对于前面出的的问题Promise is not defined
,我们已经更新node版本,此时便可运行测试
$ webpack
Hash: 12fe1da0f27e13a0ff13
Version: webpack 1.12.2
Time: 1410ms
Asset Size Chunks Chunk Names
bundle.js 10.7 kB 0 [emitted] main
[0] ./src/entiry.js 94 bytes {0} [built]
[1] ./src/content.js 45 bytes {0} [built]
+ 4 hidden modules
执行成功!
到此我们要解决此问题,其实还是环境问题,本文的目的是在于记录如何更新node版本以及进行版本切换。