node 诡异的问题,找不到自己写的 js module

2019-08-16 17:44:43 +08:00
 selfcreditgiving

node 用 require 引入 js 文件, 另一个文件可以,一个却不行,到底是什么原因,本地跑也都是没问题的,放到服务器上跑就不行了。为什么会用这么诡异的问题、、、 大家帮忙看看,3Q

引入 globalIncreId.js 不行, 引入 config.js 是可以的, 文件都是有的:

$ ls -al
total 124
drwxr-xr-x  4 root root  4096 Aug 16 17:33 .
drwxr-xr-x  5 root root  4096 Aug 16 17:27 ..
drwxr-xr-x  8 root root  4096 Aug 16 17:30 .git
-rw-r--r--  1 root root    66 Aug 16 17:27 .gitattributes
-rwxr-xr-x  1 root root    31 Aug 16 17:27 .gitignore
-rw-r--r--  1 root root 10054 Aug 16 17:27 DDL.sql
-rw-r--r--  1 root root  7877 Aug 16 17:27 app.js
-rw-r--r--  1 root root  2060 Aug 16 17:27 collectConfig.js
-rw-r--r--  1 root root  2059 Aug 16 17:27 collectConfig_editing.js
-rw-r--r--  1 root root   644 Aug 16 17:28 config.js
-rw-r--r--  1 root root   129 Aug 16 17:27 db.js
-rw-r--r--  1 root root   129 Aug 16 17:27 db1.js
-rw-r--r--  1 root root   379 Aug 16 17:33 globalIncreID.js
-rw-r--r--  1 root root   545 Aug 16 17:27 globalIncreID_mysql.js
-rw-r--r--  1 root root  1236 Aug 16 17:27 myUtil.js
drwxr-xr-x 20 root root  4096 Aug 16 17:27 node_modules
-rw-r--r--  1 root root  4956 Aug 16 17:27 package-lock.json
-rw-r--r--  1 root root   372 Aug 16 17:27 package.json
-rw-r--r--  1 root root   601 Aug 16 17:27 redisCli.js
-rw-r--r--  1 root root   339 Aug 16 17:27 test2.js
-rw-r--r--  1 root root   429 Aug 16 17:27 testAsync.js
-rw-r--r--  1 root root   829 Aug 16 17:27 testAsyncEach.js
-rw-r--r--  1 root root   875 Aug 16 17:27 testAsyncForever.js
-rw-r--r--  1 root root   286 Aug 16 17:27 testAsyncWhilst.js
-rw-r--r--  1 root root   219 Aug 16 17:27 testGlobalIncreID.js
-rw-r--r--  1 root root   584 Aug 16 17:27 testMysqlReturn.js
-rw-r--r--  1 root root   371 Aug 16 17:27 testSetTimeIntervalRun.js

这个不行:

const globalIncreId = require('./globalIncreId');

报错:

$ node app.js
internal/modules/cjs/loader.js:583
    throw err;
    ^

Error: Cannot find module './globalIncreId'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
    at Function.Module._load (internal/modules/cjs/loader.js:507:25)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/apps/unify-data/app.js:13:23)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)

这个 config 是可以的:

const config = require('./config');
1824 次点击
所在节点    问与答
13 条回复
selfcreditgiving
2019-08-16 17:48:29 +08:00
自己更新一下:
把 globalIncreId.js 改成 global.js ,然后再把 require 改成对应的名字又可以了。。。 这个文件名有毒吗
CDL
2019-08-16 17:51:25 +08:00
linux 文件名区分大小写,win 不区分。手动狗头
selfcreditgiving
2019-08-16 17:54:37 +08:00
@CDL 本地环境是 mac,服务器是 ubuntu docker 容器,应该没区别吧 搞不懂了
selfcreditgiving
2019-08-16 17:55:59 +08:00
总是要给你出一些幺蛾子 ,,,
CDL
2019-08-16 17:56:40 +08:00
@selfcreditgiving globalIncreID != globalIncreId
valeamoris
2019-08-16 17:57:20 +08:00
mac 环境是不区分大小写的
selfcreditgiving
2019-08-16 18:08:47 +08:00
@CDL 这个厉害了,自己肯定发现不了。 多谢大佬
老是犯这种低级错误,大佬们是怎么预防的啊,好几次被这种情况折磨死,最后才发现只是一个变量名写错了

这个 phpstorm 它也不报错呀
CDL
2019-08-16 18:14:51 +08:00
eslint 可以解决绝大部分这种低级问题
rbe
2019-08-16 18:16:44 +08:00
并非 mac 不区分大小写,只是默认不区分。实际 mac 提供的文件系统也可以装成区分大小写的,不过可能有些软件会坑了。
针对这个问题,你可以试试放弃驼峰命名,改用用下划线命名?
selfcreditgiving
2019-08-16 18:21:32 +08:00
@CDL eslint 确实没配,想着简单一点,主要还是懒 以后把别人的代码拷过来用也不用调格式了
hoyixi
2019-08-16 18:26:45 +08:00
让我想起了 getElemenById =》 getElemenByID

文本编辑神器和前端 IDE 还 G 没泛滥的年代,手写 js 狂操 DOM 的时候,不知写错过多少回。文思泉涌,行云流水,写完一运行,MLGB~
miyuki
2019-08-16 19:07:22 +08:00
@hoyixi 然后少了个 t /手动狗头
rockjike
2019-08-17 10:20:48 +08:00
配个智能路径

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/592534

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX