Node.js项目命名约定的文件和文件夹

什么是一个大的Node.js项目中的文件和文件夹的命名约定?

我应该利用,驼峰还是低分?

IE浏览器。 这被认为是有效的?

project-name app controllers someThings.js users.js models someThing.js user.js views some-things index.jade users logIn.jade signUp.jade ... 

几年后,我可以说目录/文件结构没有约定。 然而,大多数(专业)快速应用程序使用如下设置:

 / /bin - scripts, helpers, binaries /lib - your application /config - your configuration /public - your public files /test - your tests 

一个使用这个设置的例子是nodejs-starter 。

我个人将此设置更改为:

 / /etc - contains configuration /app - front-end javascript files /config - loads config /models - loads models /bin - helper scripts /lib - back-end express files /config - loads config to app.settings /models - loads mongoose models /routes - sets up app.get('..')... /srv - contains public files /usr - contains templates /test - contains test files 

在我看来这更好地匹配unix风格的目录结构(而上面的混合了一点)。

我也喜欢这个模式来分隔文件:

LIB / index.js

 var http = require('http'); var express = require('express'); var app = express(); app.server = http.createServer(app); require('./config')(app); require('./models')(app); require('./routes')(app); app.server.listen(app.settings.port); module.exports = app; 

LIB /静态/ index.js

 var express = require('express'); module.exports = function(app) { app.use(express.static(app.settings.static.path)); }; 

这样可以很好地解耦所有源代码,而不必打扰依赖关系。 一个真正的好战斗的讨厌的JavaScript的解决scheme。 一个真实世界的例子是在附近使用这个设置。

更新(文件名):

关于文件名最常见的是小写小写的文件名。 如果您的文件只能用两个字来描述,那么大多数JavaScript项目都使用下划线作为分隔符。

更新(variables):

关于variables,相同的“规则”适用于文件名。 原型或类应该使用骆驼案例

更新(styleguides):

没有约定。 有一些逻辑结构。

唯一可以说的一点是:永远不要使用camelCase文件和目录名称。 为什么? 它的工作原理,但在Mac和Windows上,一些行动和一些行动之间没有什么不同。 我遇到了这个问题,而不是一次。 我需要一个像这样的文件:

 var isHidden = require('./lib/isHidden'); 

但不幸的是,我创build了一个文件充满小写: lib/ishidden.js 。 它在mac上为我工作。 它在我的同事的Mac上运行良好。 testing运行没有错误。 部署后我们得到了一个巨大的错误:

 Error: Cannot find module './lib/isHidden' 

哦耶。 这是一个Linux的盒子。 所以camelCase目录结构可能是危险的。 对于在Windows或Mac上开发的同事来说,这已经足够了。

所以,如果你需要使用下划线(_)或短划线( – )分隔符。

所有包,文件夹和文件名使用kebab-case

为什么?

你应该想象,有一天任何文件夹或文件可能被提取到自己的包。 包不能包含大写字母。

新包名称中不能包含大写字母。 https://docs.npmjs.com/files/package.json#name

所以,不应该使用camelCase 。 这留下snake_casekebab-case snake_case kebab-case

kebab-case是迄今为止最常见的习惯。 下划线的唯一用途是内部节点包,这只是从早期的约定。

大多数人在JS中使用camelCase 。 如果你想开源,我build议你使用这个:-)

Node.js不强制执行任何文件命名约定( index.js除外)。 而一般的Javascript语言也不行。 你可以在这里find几十个线程,提示camelCase,连字符和下划线,其中任何一个都可以很好地工作。 所以它取决于你。 select一个并坚持下去。

据我说:对于文件,如果module.exports是一个对象,使用较低的骆驼大小写,我的意思是一个单身模块。 这也适用于JSON文件,因为它们也是单一的方式。 如果module.exports返回一个构造函数,就像一个类一样使用上面的骆驼事件。

对于文件夹使用短名称。 如果需要多个单词,让它完全小写,用“ – ”隔开,这样它可以在所有平台上一致地工作。

我已经给@ bodokaiser +1了。 以下是我的评论。

编辑。

有一些类像EventEmitter 。 他们遵循java风格的命名类。 在这里,我遵循一点。 所有的全局都是小的情况(甚至不是camelcase),所有的封装类都是java风格 – 大写。 这意味着如果你正在定义一个你自己的类function MyFunction(){...} ,你通常希望创build它大写。