Konvensi penamaan proyek Node.js untuk file & folder

116

Apa konvensi penamaan untuk file dan folder dalam proyek Node.js yang besar?

Haruskah saya memanfaatkan, camelCase, atau under-score?

Yaitu. apakah ini dianggap valid?

project-name
    app
        controllers
            someThings.js
            users.js
        models
                someThing.js
                user.js
        views
            some-things
                index.jade
            users
                logIn.jade
                signUp.jade
    ...
Rudiger
sumber
3
Sangat subjektif, struktur direktori Anda adalah milik Anda sendiri. Secara pribadi saya suka camelCase karena itulah yang saya lakukan di JS
Chad
@Chad - di Node.js, requiremenggunakan string direktori sebagai parameter, itulah mengapa itu tidak sepenuhnya milik Anda. yaitu. require('../app/controllers/someThings');
Rudiger
3
Node tidak menentukan saran atau standar apa pun untuk penamaan modul, selama itu adalah nama file / direktori yang valid dan tidak mencoba untuk mengganti nama modul inti . Untuk modulnya sendiri, ia menggunakan campuran disingkat ( fs), kata tunggal ( events), garis bawah ( child_process), dan huruf kecil ( querystring).
Jonathan Lonowski
1
@ Rudiger Jadi? Anda dapat menentukan string apa pun yang Anda inginkan, dan struktur direktori yang Anda inginkan dapat Anda miliki (asalkan nama Anda adalah nama file yang valid tentunya).
Chad
Dari apa yang dapat saya ketahui dari melihat-lihat proyek keystone lainnya seperti nama file mocha seperti captain-awesome-file.js tampaknya cukup umum. Setidaknya itulah yang akan saya gunakan!
Charles Ferentchak

Jawaban:

154

Setelah beberapa tahun dengan node, saya dapat mengatakan bahwa tidak ada konvensi untuk struktur direktori / file. Namun kebanyakan aplikasi ekspres (profesional) menggunakan pengaturan seperti:

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

Contoh yang menggunakan penyiapan ini adalah nodejs-starter .

Saya pribadi mengubah pengaturan ini menjadi:

/
  /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

Menurut pendapat saya, yang terakhir lebih cocok dengan struktur direktori bergaya Unix (sedangkan yang pertama mencampurkannya sedikit).

Saya juga menyukai pola ini untuk memisahkan file:

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 / static / index.js

var express = require('express');

module.exports = function(app) {

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

};

Hal ini memungkinkan pemisahan semua kode sumber dengan rapi tanpa harus mengganggu dependensi. Solusi yang sangat bagus untuk melawan Javascript yang buruk. Contoh dunia nyata ada di dekatnya yang menggunakan penyiapan ini.

Perbarui (nama file):

Mengenai nama file yang paling umum adalah nama file pendek dan huruf kecil . Jika file Anda hanya dapat dideskripsikan dengan dua kata, sebagian besar proyek JavaScript menggunakan garis bawah sebagai pemisah.

Perbarui (variabel):

Mengenai variabel, "aturan" yang sama berlaku untuk nama file. Prototipe atau kelas, bagaimanapun, harus menggunakan camelCase .

Perbarui (styleguides):

bodokaiser
sumber
27
Betapa menarik dan bagusnya jawaban Anda, ini di luar topik, pembuat topik secara khusus meminta konvensi penamaan bukan untuk struktur direktori. Ketika kita sampai pada topik ini, kita berharap untuk mengetahui apakah file diberi nama yang lebih baik dengan tanda hubung, garis bawah atau camelCase. Saya akan memberi suara positif, jika ini ditambahkan ke jawaban ini.
Tronix117
3
@ Tronix117 apa masalahnya? Pertanyaan menanyakan "konvensi penamaan proyek untuk file & folder?" dan penamaan tidak terbatas pada nama file karena juga menyertakan nama jalur lengkap.
bodokaiser
24
tentu saja, tetapi penulis secara khusus bertanya "Haruskah saya menggunakan huruf besar, camelCase, atau under-score?". Ketika dia menulis contoh nya, dia secara eksplisit meletakkan 'someThings' dan 'some-things' hanya untuk mengetahui apakah itu dapat dianggap valid. Ketika saya pergi ke topik ini, saya mengharapkan jawaban untuk pertanyaan khusus ini, dan untuk mengetahui apa yang biasanya digunakan sebagai penamaan file. Saya tidak mengatakan jawaban Anda salah, itu sempurna untuk tujuannya, tetapi tidak lengkap menurut saya karena dia tidak benar-benar menjawab pertanyaan utama.
Tronix117
5
Saya pikir Anda salah paham;). Saya hanya mencari sesuatu yang tidak saya temukan pada jawaban yang diterima, tetapi secara khusus ditanya, tidak menyebarkan kebencian dalam bentuk apa pun, Anda akan sedikit berlebihan dalam hal ini. Saya hanya ingin Anda menambahkan beberapa informasi tentang itu pada jawabannya, sehingga orang yang akan mencarinya di masa depan tidak akan menemui jalan buntu.
Tronix117
3
@ Tronix117 Sebenarnya, inilah mengapa saya mendapati diri saya di halaman ini membaca jawaban ini. Saya berharap tidak hanya untuk struktur direktori, tetapi yang lebih penting konvensi nama (tanda hubung, garis bawah, camelCase, TitleCase, dll ...). Sayangnya, jawabannya masih tidak memuatnya, dan sepertinya bodokaiserterlalu pribadi bagi saya untuk masuk dan meminta pendapatnya tentang hal ini ditambahkan ke jawabannya (seperti yang awalnya ditanyakan OP dalam pertanyaan mereka) ( batuk batuk ).
Putar
97

Gunakan kebab-caseuntuk semua nama paket, folder dan file.

Mengapa?

Anda harus membayangkan bahwa folder atau file apa pun mungkin diekstrak ke paketnya sendiri suatu hari nanti. Paket tidak boleh berisi huruf besar.

Paket baru tidak boleh memiliki huruf besar di namanya. https://docs.npmjs.com/files/package.json#name

Oleh karena itu, camelCasesebaiknya jangan pernah digunakan. Daun ini snake_casedan kebab-case.

kebab-casesejauh ini merupakan konvensi paling umum saat ini. Satu-satunya penggunaan garis bawah adalah untuk paket node internal, dan ini hanyalah konvensi dari masa-masa awal.

vaughan
sumber
2
Anda lupa titik? seperti socket.io
Roee
1
.2c, dapat melakukan otomatisasi sederhana dari kebab-case ke kebabCase dalam skrip atau aplikasi apa pun dalam bahasa apa pun menggunakan regex - lakukan sepanjang waktu 🙃
rob2d
63

Tidak ada konvensi. Ada beberapa struktur logis.

Satu-satunya hal yang dapat saya katakan: Jangan pernah menggunakan file camelCase dan nama direktori. Mengapa? Ini berfungsi tetapi di Mac dan Windows tidak ada perbedaan antara someAction dan some action. Saya menemui masalah ini, dan tidak sekali pun. Saya membutuhkan file seperti ini:

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

Tapi sayangnya saya buat file dengan penuh huruf kecil: lib/ishidden.js. Ini berhasil untuk saya di mac. Ini bekerja dengan baik di Mac rekan kerja saya. Tes berjalan tanpa kesalahan. Setelah penerapan, kami mendapat kesalahan besar:

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

Oh ya. Ini kotak linux. Jadi struktur direktori camelCase bisa berbahaya. Ini cukup untuk kolega yang mengembangkan di Windows atau Mac.

Jadi gunakan pemisah garis bawah (_) atau tanda hubung (-) jika Anda perlu.

yitsushi
sumber
4
+1, tambahkan fakta bahwa mengganti nama folder case-sensitive di git pada sistem non-cs benar-benar merepotkan.
maks
4
Saya tidak begitu mengerti masalah dengan camelCase di sini. Bukankah masalah akan diselesaikan dengan memberi nama file dengan benar sejak awal (lib / isHidden.js)?
Mike
Hai Mike, intinya adalah CamelCase akan rusak saat diterapkan di beberapa sistem. Saya bingung tentang mengapa semua direktori saya mendapatkan 404 ketika saya menyebarkan dari Mac ke kotak Linux dengan paket bernama "groupPages". Saya harus beralih ke halaman grup untuk memperbaiki berbagai hal.
tempranova
3
Lebih buruk lagi: buat versi huruf kecil dari nama file dan minta rekan kerja yang ceroboh membuat versi huruf kecil di direktori yang sama. Sekarang lakukan pemeriksaan di os non-case-sensitive, dan coba cari tahu mengapa aplikasi Anda tidak berfungsi. Dan ya, ini terjadi.
L0LN1NJ4
Saya suka jawaban ini, namun saya ingin menunjukkan bahwa tanda hubung (-) mungkin memiliki beberapa masalah juga. Misalnya, menggunakan kerangka uji Nighwatch saya membuat objek halaman bernama admin-login.js. Kemudian saya mencoba mengaksesnya dari skrip uji menggunakan const loginPage = browser.page.admin-login(). Saya mendapat kesalahan ReferenceError: login is not defined. Menggunakan garis bawah (_) untuk nama file memecahkan masalah. Saya juga dapat membayangkan bahwa menggunakan nama file dengan karakter tanda hubung di baris perintah juga dapat menyebabkan beberapa masalah. Oleh karena itu, menurut saya garis bawah adalah pemisah teraman untuk nama file secara umum.
Dragan Nikolic
15

Berdasarkan ' Panduan Gaya JavaScript Google '

Nama file harus semuanya huruf kecil dan dapat menyertakan garis bawah (_) atau tanda hubung (-), tetapi tidak ada tanda baca tambahan. Ikuti konvensi yang digunakan proyek Anda. Ekstensi nama file harus .js.

Vlad Bezden
sumber
3

Kebanyakan orang menggunakan camelCaseJS. Jika Anda ingin membuat sesuatu menjadi open-source, saya sarankan Anda menggunakan yang ini :-)

Mathieu Amiot
sumber
Beberapa proyek, seperti Locomotive.js, menggunakan camelCaseuntuk file pengontrol. :-) Tergantung. Saya cenderung menggunakan PascalCaseuntuk file seperti kelas.
Mathieu Amiot
@yitsushi tampaknya cukup prihatin dengan penamaan kasus unta (dan pascal), jika Anda ingin membuat modul portabel casing unta tampaknya ide yang buruk?
gumaflux
0

Node.js tidak memberlakukan konvensi penamaan file apa pun (kecuali index.js). Dan bahasa Javascript secara umum juga tidak. Anda dapat menemukan lusinan utas di sini yang menyarankan camelCase, tanda hubung, dan garis bawah, yang semuanya berfungsi dengan baik. Jadi terserah kamu. Pilih satu dan pertahankan.

Subhas
sumber
1
Ini sebenarnya bukan node yang 'ditegakkan', harap baca ini: nodejs.org/api/modules.html#modules_folders_as_modules
moka
0

Menurut saya: Untuk file, gunakan huruf kecil jika module.exports adalah objek, maksud saya modul tunggal. Ini juga berlaku untuk file JSON karena mereka juga satu ton. Gunakan huruf besar unta jika module.exports mengembalikan fungsi konstruktor yang bertindak seperti kelas.

Untuk folder gunakan nama pendek. Jika ada kebutuhan untuk memiliki lebih dari satu kata, biarkan itu dipisahkan dengan huruf kecil sepenuhnya oleh "-" agar berfungsi di semua platform secara konsisten.

arunram
sumber