初尝node,问一个无下限的问题(问题已经解决,但有后续疑问。。。)
发布于 11 年前 作者 chuguixin 5221 次浏览 最后一次编辑是 8 年前

在读node.js开发指南,说到package,书中举例package.json可以这么写:{ “main” : ‘./lib/subIndex.js’}。 但是,我运行的时候提示错误,一直找不到原因。。。提示如下: module.js:117 throw e; … Unexpected taken 锘?

类似于这样,求大神帮破。

文件编码问题,是用utf-8无bom或者ansi格式就正常运行了。如果utf-8带bom,便会报错。

试着去读了几行源码,看到module.js里面这么读取package.json文件: var jsonPath = path.resolve(requestPath, ‘package.json’); var json = fs.readFileSync(jsonPath, ‘utf8’); 然后,buffer中有utf-8和uft8两个参数处理方案,似乎如果传入参数’utf-8’会被转为’utf8’。 那么,node就不会读取带bom的utf-8文件吗?

17 回复

单引号改成双引号就对了, 因为 JSON 就这么定义的… 认为无下限记得问题解决了标题上编辑下价格 [Closed] 哦 :)

好像不是唉,我改了还是提示同样的错误。。。而且,我记得,json要求key需要带着双引号,value没有这个限制。

怎么会没有…你上 json.org 看一下标准是怎么定义的… …不过,有些解释器支持而已…如果用 “” 你这里 / 可能需要用 //

会不会你的单引号或双引号是全角(中文)的单引号或双引号?

是的,你说得对,应该用双引号。重新看了一下标准,value在字符串的时候要求双引号,其它值是不能加双引号。比如,如果{“abc”:“true”}和{“abc”:true}都是正确的,但是格式化出来是不一样的对象。但是,我这个的问题还是没有解决。。。

谢谢你,我检查了,不是全角,是英文的。

贴一下完整的 package.json 和操作步骤吧, 可能漏了什么步骤

我直接去复制了node官网的package.json的例子,{ “name” : “some-library”,“main” : “./lib/some-library.js” },然后按照名字和路径改了lib下的js,还是报同样的错误。。。

@chuguixin 感觉… 还可以详细点不… 网址都没给啊, 还有什么系统什么编辑器? 你的报错真是这样的? 出来中文了?

Unexpected taken 锘?

@jiyinyiyong 帖子更新了。。。谢谢您。

啊…我知道这个问题了…你这个文件是用windows 记事本创建或者修改过的吧…?

补充一下,在windows 下 utf 8 如果用记事本修改…的话…会导致文件出现你所说的情况,然后很多时候不可用…例如gradle 也有这个问题…所以,我现在都不敢用记事本修改utf8文件…

你这个问题…可以向node 提一个issue …以前fastjson 也有一样的问题…

@chuguixin OK, 关于 Windows 我无力啊

手写package.json文件多麻烦,用npm init让程序帮你生成吧

应该就是文件前面的bom影响了文件的读取。。。

回到顶部