Javascript Node.js文件的项目命名约定&;文件夹

Javascript Node.js文件的项目命名约定&;文件夹,javascript,node.js,Javascript,Node.js,大型Node.js项目中文件和文件夹的命名约定是什么 我应该大写、camelCase还是分数不足 这被认为是有效的吗 project-name app controllers someThings.js users.js models someThing.js user.js views some-thin

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

我应该大写、camelCase还是分数不足

这被认为是有效的吗

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

Node.js不强制执行任何文件命名约定(除了
index.js
)。而Javascript语言通常也不会。你可以在这里找到几十条线索,建议使用camelCase、连字符和下划线,其中任何一条都非常有效。所以这取决于你。选择一个并坚持使用。

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

使用node几年后,我可以说目录/文件结构没有任何约定。但是,大多数(专业)express应用程序使用如下设置:

/
  /bin - scripts, helpers, binaries
  /lib - your application
  /config - your configuration
  /public - your public files
  /test - your tests
使用此设置的示例如下

我个人将此设置更改为:

/
  /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;
var express = require('express');

module.exports = function(app) {

  app.use(express.static(app.settings.static.path));

};
lib/static/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;
var express = require('express');

module.exports = function(app) {

  app.use(express.static(app.settings.static.path));

};
这允许在不必麻烦依赖项的情况下,将所有源代码巧妙地解耦。这是一个非常好的解决方案,用于对抗讨厌的Javascript。一个实际示例是使用此设置的

更新(文件名):

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

更新(变量):

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

更新(样式指南):


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

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

      var isHidden = require('./lib/isHidden');
      
      但遗憾的是,我创建了一个满是小写字母的文件:
      lib/ishiden.js
      。它在mac上对我有效。它在我同事的mac电脑上运行良好。测试运行时没有错误。部署后,我们遇到了一个巨大的错误:

      Error: Cannot find module './lib/isHidden'
      
      哦,是的。这是一个linux盒子。所以camelCase目录结构可能是危险的。对于在Windows或Mac上开发的同事来说,这已经足够了


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

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


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

      对所有包、文件夹和文件名使用
      kebab case

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

      新包的名称中不得包含大写字母。

      因此,不应使用camelCase。剩下的是
      snake\u盒
      kebab盒

      烤肉串是目前最普遍的习俗。下划线的唯一用途是用于内部节点包,这只是早期的惯例。

      基于“”

      文件名必须全部为小写,并且可以包含下划线(_)或 破折号(-),但没有附加标点。按照惯例 您的项目使用。文件名的扩展名必须是.js


      非常主观,您的目录结构是您自己的。就我个人而言,我喜欢这样做,因为这是我的工作JS@Chad-在Node.js中,
      require
      将目录字符串作为参数,这就是为什么它不完全是您自己的。例如,
      require(“../app/controllers/something”)节点不指定任何命名模块的建议或标准,只要它们是有效的文件/目录名,并且不尝试重写。对于自己的模块,它混合使用缩写()、单字()、下划线()和小写()。@Rudiger So?你可以指定你想要的任何字符串,以及你想要的目录结构(当然前提是你的名字是有效的文件名)。这就是我至少要用的东西!这实际上并不是节点“强制”的内容,请阅读以下内容:一些项目,如motor.js,正在使用
      camelCase
      作为控制器文件。:-)看情况而定。我倾向于对类文件使用
      PascalCase
      。@yitsushi似乎对camel(和pascal)大小写命名提出了相当大的关注,如果你想创建可移植模块,camel case肯定是个坏主意?你的答案有多有趣,做得多好,这是离题的,主题创建者特别要求使用命名约定,而不是目录结构。当我们谈到这个主题时,我们希望知道文件是用破折号、下划线还是大小写命名更好。如果这个答案加上这个,我会投赞成票。@Tronix117有什么问题?该问题询问“文件和文件夹的项目命名约定”,命名不限于文件名,因为它还包括完整的路径名。当然,作者特别问“我应该大写、camelCase还是分数不足?”。当他写例子时,他明确地写下“something”和“something”,只是为了知道它是否有效。当我谈到这个话题时,我希望能得到这个具体问题的答案