Javascript Node.js文件的项目命名约定&;文件夹
大型Node.js项目中文件和文件夹的命名约定是什么 我应该大写、camelCase还是分数不足 这被认为是有效的吗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
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”,只是为了知道它是否有效。当我谈到这个话题时,我希望能得到这个具体问题的答案