【问题标题】:error: ‘REPLACE_INVALID_UTF8’ is not a member of ‘v8::String’错误:“REPLACE_INVALID_UTF8”不是“v8::String”的成员
【发布时间】:2016-01-10 13:40:15
【问题描述】:

所以我想在 Raspbian 中构建 this nodejs tool。所以按照说明说我需要 npm install 我继续使用 apt-get 安装节点:

sudo apt-get install nodejs npm

然后我尝试编译/安装,我得到这个错误:

$ npm install

> configure@0.0.1 install /home/pi/Documents/Code/buzzerbot9000/node_modules/configure
> node install.js

sh: 1: node: not found
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian

npm ERR! configure@0.0.1 install: `node install.js`
npm ERR! Exit status 127

显然 nodejs 包的安装并没有创建任何全局可用的node 命令。然后我通过 apt-file 寻找它:

$ apt-file search /usr/bin/node
clustershell: /usr/bin/nodeset
genders: /usr/bin/nodeattr
lbdb: /usr/bin/nodelist2lbdb
node-gyp: /usr/bin/node-gyp
node-static: /usr/bin/node-static
nodejs: /usr/bin/nodejs
nodejs-dbg: /usr/lib/debug/usr/bin/nodejs
nodejs-legacy: /usr/bin/node
noweb: /usr/bin/nodefs
osm2pgsql: /usr/bin/nodecachefilereader

所以,我想我需要安装nodejs-legacy,我这样做了,我得到了要在此处突出显示的重要错误:

$ npm install

-
> configure@0.0.1 install /home/pi/Documents/Code/buzzerbot9000/node_modules/configure
> node install.js

-
> sqlite3@3.1.0 install /home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build

make: Entering directory '/home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3/build'
  ACTION deps_sqlite3_gyp_action_before_build_target_unpack_sqlite_dep Release/obj/gen/sqlite-autoconf-3081101/sqlite3.c
  TOUCH Release/obj.target/deps/action_before_build.stamp
  CC(target) Release/obj.target/sqlite3/gen/sqlite-autoconf-3081101/sqlite3.o
  AR(target) Release/obj.target/deps/sqlite3.a
  COPY Release/sqlite3.a
  CXX(target) Release/obj.target/node_sqlite3/src/database.o
In file included from ../src/database.h:10:0,
                 from ../src/database.cc:4:
../node_modules/nan/nan.h:316:47: error: ‘REPLACE_INVALID_UTF8’ is not a member of ‘v8::String’
   static const unsigned kReplaceInvalidUtf8 = v8::String::REPLACE_INVALID_UTF8;
                                               ^
node_sqlite3.target.mk:98: recipe for target 'Release/obj.target/node_sqlite3/src/database.o' failed
make: *** [Release/obj.target/node_sqlite3/src/database.o] Error 1
make: Leaving directory '/home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/share/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:809:12)
gyp ERR! System Linux 4.1.7-v7+
gyp ERR! command "nodejs" "/usr/bin/node-gyp" "build" "--fallback-to-build" "--module=/home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3/lib/binding/node-v11-linux-arm/node_sqlite3.node" "--module_name=node_sqlite3" "--module_path=/home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3/lib/binding/node-v11-linux-arm"
gyp ERR! cwd /home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3
gyp ERR! node -v v0.10.29
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok 
node-pre-gyp ERR! build error 
node-pre-gyp ERR! stack Error: Failed to execute 'node-gyp build --fallback-to-build --module=/home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3/lib/binding/node-v11-linux-arm/node_sqlite3.node --module_name=node_sqlite3 --module_path=/home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3/lib/binding/node-v11-linux-arm' (1)
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3/node_modules/node-pre-gyp/lib/util/compile.js:83:29)
node-pre-gyp ERR! stack     at ChildProcess.emit (events.js:98:17)
node-pre-gyp ERR! stack     at maybeClose (child_process.js:755:16)
node-pre-gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:822:5)
node-pre-gyp ERR! System Linux 4.1.7-v7+
node-pre-gyp ERR! command "node" "/home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! cwd /home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3
node-pre-gyp ERR! node -v v0.10.29
node-pre-gyp ERR! node-pre-gyp -v v0.6.10
node-pre-gyp ERR! not ok 
Failed to execute 'node-gyp build --fallback-to-build --module=/home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3/lib/binding/node-v11-linux-arm/node_sqlite3.node --module_name=node_sqlite3 --module_path=/home/pi/Documents/Code/buzzerbot9000/node_modules/sqlite3/lib/binding/node-v11-linux-arm' (1)
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian

npm ERR! sqlite3@3.1.0 install: `node-pre-gyp install --fallback-to-build`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the sqlite3@3.1.0 install script.
npm ERR! This is most likely a problem with the sqlite3 package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-pre-gyp install --fallback-to-build
npm ERR! You can get their info via:
npm ERR!     npm owner ls sqlite3
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 4.1.7-v7+
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /home/pi/Documents/Code/buzzerbot9000
npm ERR! node -v v0.10.29
npm ERR! npm -v 1.4.21
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/pi/Documents/Code/buzzerbot9000/npm-debug.log
npm ERR! not ok code 0

我已经用谷歌搜索过了,显然是因为有旧版本的东西(例如,参见 this other question)。

那么,我应该在这里真正升级什么,以及以什么方式(我应该先卸载 debian 包并使用 npm?我迷路了)。请像 5 岁的孩子一样解释一下,因为我是 node 新手。

【问题讨论】:

    标签: node.js npm raspbian raspberry-pi2 node-gyp


    【解决方案1】:

    我们刚刚通过以下方式解决了这样的问题:

    npm -g install npm
    

    尝试更新 npm。

    【讨论】:

    • 没有-g,新的npm在./node_modules/.bin/npm,所以即使没有root你也可以这样做。
    【解决方案2】:

    显然 Debian 缺少 v0.10.29 的补丁,因为 v0.10.29 有这个常量。从官方来源了解最新信息的最佳选择是改用NodeSource's repos 之一。

    另外值得注意的是:node v4.x 是撰写本文时的最新稳定版本。

    【讨论】:

    • 可能是因为我还安装了比 0.10.29 更早的 nodejs-legacy?
    • nodejs-legacy 仅安装一个符号链接,将node 指向nodejs 二进制文件。
    • 从本指南 (joshondesign.com/2013/10/23/noderpi) 安装 0.10.40 有效
    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2017-08-22
    • 2017-11-15
    相关资源
    最近更新 更多