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

Rud*_*ger 89 javascript 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
    ...
Run Code Online (Sandbox Code Playgroud)

bod*_*ser 133

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

/
  /bin - scripts, helpers, binaries
  /lib - your application
  /config - your configuration
  /public - your public files
  /test - your tests
Run Code Online (Sandbox Code Playgroud)

使用此设置的示例是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
Run Code Online (Sandbox Code Playgroud)

在我看来,这与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;
Run Code Online (Sandbox Code Playgroud)

LIB /静态/ index.js

var express = require('express');

module.exports = function(app) {

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

};
Run Code Online (Sandbox Code Playgroud)

这允许整齐地解耦所有源代码而不必考虑依赖性.一个真正的好解决方案来打击令人讨厌的JavaScript.附近有一个使用此设置的真实示例.

更新(文件名):

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

更新(变量):

关于变量,相同的"规则"适用于文件名.然而,原型或类应该使用驼峰式.

更新(styleguides):

  • 你的答案是多么有趣和完美,它不在主题,主题创建者特别要求命名约定而不是目录结构.当我们讨论这个主题时,我们希望知道文件是否更好地用破折号,下划线或camelCase命名.如果将此添加到此答案,我将upvote. (21认同)
  • 当然,但作者特别问"我应该利用资本,使用资本,还是低于标准?".当他写下他的例子时,他明确地说出"someThings"和"some-things"只是为了知道它是否可以被认为是有效的.当我谈到这个主题时,我希望得到这个特定问题的答案,并知道通常用作文件命名的内容.我不是说你的答案是错的,它的目的是完美的,但在我看来并不完整,因为他并没有真正回答主要问题. (20认同)
  • 我想你误解了我;).我只是在寻找一些我在接受的答案中没有找到的东西,但是被特别要求,而不是任何形式的仇恨,你在这一点上走得有点远.我只是想让你在答案中添加一些有关这方面的信息,以便那些将来会寻找它的人不会陷入死胡同. (4认同)
  • @Tronix117有什么问题?该问题要求"文件和文件夹的项目命名约定?" 和命名不仅限于文件名,因为它还包括完整的路径名. (3认同)
  • @ Tronix117实际上,这就是为什么我在此页面上阅读此答案后才发现自己的原因。我不仅希望目录结构,而且希望更重要的名称约定(破折号,下划线,camelCase,TitleCase等)。不幸的是,答案仍然没有包含它,看来“ bodokaiser”个人认为太过个人了,以至于我无法要求他添加关于此问题的意见(正如OP最初在他们的问题中提出的那样)(*咳嗽*)。 (2认同)
  • @Swivel这样更好吗? (2认同)

vau*_*han 71

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

为什么?

您应该想象某天某个文件夹或文件可能会被提取到自己的包中.包不能包含大写字母.

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

因此,camelCase永远不应该使用.这使得snake_casekebab-case.

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

  • `node_modules` 是我坚持使用蛇包的原因。 (7认同)
  • @dustytrash 还有其他使用短横线大小写的常见文件,例如“package-lock.json”或“service-worker.ts”。 (4认同)
  • 确切地说,我唯一不喜欢 kebab case 的是当我编辑文件名时,如果我双击,它不会选择所有文件名,所以也许蛇包是好的,当然都是关于偏好的 (4认同)
  • 你忘了点吗?像socket.io (3认同)
  • .2c,可以使用正则表达式在任何语言的任何脚本或应用程序中执行从 kebab-case 到 kebabCase 的简单自动化 - 一直这样做 (2认同)

小智 57

没有惯例.有一些逻辑结构.

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

var isHidden = require('./lib/isHidden');
Run Code Online (Sandbox Code Playgroud)

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

Error: Cannot find module './lib/isHidden'
Run Code Online (Sandbox Code Playgroud)

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

因此,如果需要,请使用下划线(_)或短划线( - )分隔符.

  • +1,添加一个事实,即在非cs系统上重命名git中的区分大小写的文件夹是一件非常麻烦的事. (4认同)
  • 我真的不明白camelCase的问题.首先正确命名文件(lib/isHidden.js)是不是可以解决问题? (4认同)
  • 更糟糕的是:创建一个文件名的camelcase版本,并让粗心的同事在同一目录中创建一个小写版本.现在在非区分大小写的操作系统中检查,并尝试弄清楚为什么你的应用程序无法运行.是的,这发生了. (3认同)

Vla*_*den 10

基于“ Google JavaScript样式指南

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