174

大型 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
    ...
4

7 回答 7

203

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

/
  /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 的一个非常好的解决方案。附近有一个使用此设置的真实示例。

更新(文件名):

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

更新(变量):

关于变量,同样的“规则”适用于文件名。然而,原型或类应该使用camelCase

更新(风格指南):

于 2014-01-02T15:08:24.147 回答
164

用于kebab-case所有包、文件夹和文件名。

为什么?

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

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

因此,camelCase永远不应使用。这留下snake_casekebab-case

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

于 2017-07-03T09:41:59.133 回答
76

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

我只能说一件事:永远不要使用 camelCase 文件和目录名称。为什么?它可以工作,但在 Mac 和 Windows 上,someAction 和 some action 之间没有区别。我遇到了这个问题,一次也没有。我需要这样的文件:

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

但可悲的是,我创建了一个充满小写的文件:lib/ishidden.js. 它在mac上对我有用。它在我同事的mac上运行良好。测试运行没有错误。部署后我们得到一个巨大的错误:

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

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

因此,如果需要,请使用下划线 (_) 或破折号 (-) 分隔符。

于 2014-01-04T22:25:45.293 回答
26

基于“谷歌 JavaScript 样式指南

文件名必须全部小写,并且可以包含下划线 (_) 或破折号 (-),但不能包含额外的标点符号。遵循您的项目使用的约定。文件名的扩展名必须是 .js。

于 2018-04-04T15:39:34.110 回答
2

Node.js 不强制执行任何文件命名约定(除了index.js)。Javascript 语言通常也没有。你可以在这里找到几十个暗示驼峰式、连字符和下划线的线程,其中任何一个都可以很好地工作。所以这取决于你。选择一个并坚持下去。

于 2013-12-31T21:42:03.927 回答
1

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

于 2014-01-01T18:36:57.140 回答
1

根据我的说法:对于文件,如果 module.exports 是一个对象,则使用小写字母,我的意思是一个单例模块。这也适用于 JSON 文件,因为它们在某种程度上也是单吨的。如果 module.exports 返回一个其作用类似于类的构造函数,则使用大写驼峰式。

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

于 2017-04-02T10:26:22.583 回答