在读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文件吗?
好像不是唉,我改了还是提示同样的错误。。。而且,我记得,json要求key需要带着双引号,value没有这个限制。
怎么会没有…你上 json.org 看一下标准是怎么定义的… …不过,有些解释器支持而已…如果用 “” 你这里 / 可能需要用 //
会不会你的单引号或双引号是全角(中文)的单引号或双引号?
是的,你说得对,应该用双引号。重新看了一下标准,value在字符串的时候要求双引号,其它值是不能加双引号。比如,如果{“abc”:“true”}和{“abc”:true}都是正确的,但是格式化出来是不一样的对象。但是,我这个的问题还是没有解决。。。
谢谢你,我检查了,不是全角,是英文的。
我直接去复制了node官网的package.json的例子,{ “name” : “some-library”,“main” : “./lib/some-library.js” },然后按照名字和路径改了lib下的js,还是报同样的错误。。。
@jiyinyiyong 帖子更新了。。。谢谢您。
啊…我知道这个问题了…你这个文件是用windows 记事本创建或者修改过的吧…?
补充一下,在windows 下 utf 8 如果用记事本修改…的话…会导致文件出现你所说的情况,然后很多时候不可用…例如gradle 也有这个问题…所以,我现在都不敢用记事本修改utf8文件…
你这个问题…可以向node 提一个issue …以前fastjson 也有一样的问题…
手写package.json文件多麻烦,用npm init
让程序帮你生成吧
了解~
应该就是文件前面的bom影响了文件的读取。。。