News for hackers. Stuff that matters.
Re:Show HN: Imba – I have spent 7 years creating a programmi... by resonious on Tuesday August 17, 2021 @07:16AM (#28208615)
Personally I've always been kind of confused by the common best practice of separating everything. React and Vue single file components made so much sense to me.

I guess if I were to rationalize my position, I'd say it's because I have a hard time finding related things when they're separate. If a button or "a" tag have a special click handler, I want to know when looking at it. If it just has classes, then I don't know if that are for style or if they're for behavior. I know there are some conventions out there where you prefix classes with "js-" etc, but if you just use "onclick" then it's obvious and you don't need a convention.

Re:Show HN: Imba – I have spent 7 years creating a programmi... by lhorie on Tuesday August 17, 2021 @11:48AM (#28211165)
Personally I think it's not so much about separation of concerns/technologies per se, it's that this debate boils down to a different debate under the hood: the one about folder-by-type vs folder-by-feature[0].

The gist is that folder-by-feature is generally preferrable because it requires less context switching (in the literal sense of jumping between multiple different far away folders and scanning each for the thing you're looking for)

Single file components force you to organize code in a folder-by-feature structure, to a large extent. You can use folder-by-feature structure alongside with separation of technologies, it's just not that common to see it because the tooling to support it is not quite as optimized.

[0] https://softwareengineering.stackexchange.com/questions/3385...

Re:Show HN: Imba – I have spent 7 years creating a programmi... by cableshaft on Wednesday August 18, 2021 @09:43AM (#28220824)
> You can use folder-by-feature structure alongside with separation of technologies, it's just not that common to see it

Angular is a pretty good example of this. The HTML, CSS, unit tests, and code are all in separate files, but they have the same base name and are grouped together in the same place.

Re:Show HN: Imba – I have spent 7 years creating a programmi... by tiborsaas on Tuesday August 17, 2021 @07:23AM (#28208669)
It's fine if you have a few colors, but with 50+ lines of SASS/component I'd rather have them separately.

> I have a hard time finding related things when they're separate.

Store them in the same directory?

I agree on the events/business logic that they make sense to couple with the template code.

Re:Show HN: Imba – I have spent 7 years creating a programmi... by Mavvie on Tuesday August 17, 2021 @11:17AM (#28210797)
With something like Svelte, I see no reason an editor couldn't let me choose if I want to see the JS/HTML/CSS in the single file (as it is on disk) or split it up into separate editor tabs for me.
Re:Show HN: Imba – I have spent 7 years creating a programmi... by scns on Tuesday August 17, 2021 @10:12AM (#28210063)
And have to switch between three files back and forth?
Re:Show HN: Imba – I have spent 7 years creating a programmi... by tiborsaas on Tuesday August 17, 2021 @10:48AM (#28210455)
I usually split my IDE to multiple planes. A 4k, large monitor helps though :)
Re:Show HN: Imba – I have spent 7 years creating a programmi... by arodyginc on Tuesday August 17, 2021 @10:56AM (#28210550)
For their demo https://imba.io/ they put styles in a separate file, how so?
Re:Show HN: Imba – I have spent 7 years creating a programmi... by klibertp on Tuesday August 17, 2021 @10:24AM (#28210175)
What? How is that a problem, why would it be something that's best avoided, and why simply displaying all three files at once in one of a million ways available is not a solution?
Re:Show HN: Imba – I have spent 7 years creating a programmi... by kingdomcome50 on Tuesday August 17, 2021 @11:02AM (#28210633)
I don’t see any added value of separating pieces of a component into different files. The CSS, JS, and HTML are all logically coupled no matter how you organize them.

At best you will achieved a few smaller files. At worst you make working within the system a real pain.

Re:Show HN: Imba – I have spent 7 years creating a programmi... by dec0dedab0de on Tuesday August 17, 2021 @03:11PM (#28213648)
I think its much more of a pain to have more than one language in the same file, but I suppose that's a matter of preference.

Some practical reasons for separate files, off the top of my head:

In-lining JS, and CSS means enabling unsafe-eval, which can open up XSS vulnerabilities if you use any content from users or gathered from a source you don't control. You could also do the unsafe-hashes, but that's kind of a pain.

If you're not making a SPA, it would not be fun to copy the CSS to all of your files.

If you do not couple your CSS to your site, you can reuse it across many sites and have the same style. Say if you have separate site for your blog, but want it to look the same as your main site.

If you're working on a team splitting things up into separate files will avoid some merge conflicts.

Chances are they will not be updated all at the same time, so caching would speed up page load times, as the user would only have to download the changed files

Re:Show HN: Imba – I have spent 7 years creating a programmi... by klibertp on Tuesday August 17, 2021 @12:01PM (#28211338)
I don't see a difference between switching between files and switching between positions in a file which is longer than a page or two. In both cases the switching is not free - unless you do something about it (like spliting panes/windows in your editor; bonus: it works for both separate files and long files in the same way!). It's also trivial (well... depending on the IDE/editor I guess) to make it open all 3 files when any one of them is opened and/or to make a command to cycle between files, similarly to how you can switch between .c and .h files in most environments.

For files where the logic, structure, and styling fits on a single page - yeah, splitting it into separate files doesn't make much sense.

> At worst you make working within the system a real pain.

That's what I don't understand - what pain? That it's better not to work with it using nano or notepad? It simply looks like a pain I would never experience, and I'm wondering if I'm right.

Re:Show HN: Imba – I have spent 7 years creating a programmi... by RussianCow on Tuesday August 17, 2021 @03:52PM (#28214082)
> I don't see a difference between switching between files and switching between positions in a file which is longer than a page or two.

Exactly! By putting everything into one file, you give the reader the option of splitting their view if they want, or looking at the file all in one pane; with multiple files, you have to have each file open independently. Editors give pretty nice ways of navigating to specific functions/methods/points within a file these days, so traversing a large file is not really an issue IME.

Personally, I don't understand the fascination with splitting everything into super small files; given the large number of files I generally have open in my editor, I'd rather look at one file with 1k lines of code than 3 files with 100-500 each. With separate files, if I'm trying to debug something that touches three different components, I need to have 9 files open instead of just 3.

Re:Show HN: Imba – I have spent 7 years creating a programmi... by klibertp on Tuesday August 17, 2021 @04:45PM (#28214642)
This really depends heavily on how you use your editor, on its specific features. For example, you qualify the "navigating to specific definition" with "within the file", but in my editor jumping to definition across multiple files works exactly the same way as within a single file, and due to a stack of jumps that you can pop, there is usually no need to know or care in which file you are currently, or were previously. Similarly, you mention "large number of files you have open in your editor" as if that was a problem of any kind. For me, it isn't - I have 60+ files open frequently, but I have quite a few ways of searching for/jumping to a specific file, buffer, or content that I want to see, and I never need to cycle through open files or tabs. Most of the time I don't have to care if the file is open - there's literaly no difference in the method(s) of getting to a file because of its state (open or not).

The differences between my and your environments mean that our preferred workflows differ, too, because what can be problematic for you can be easy for me, and vice versa.

That being said, I also don't advocate "splitting everything into super small files". Splitting a file that is less than a "page or two" (I see 61 lines of code on one page, so less than 120 loc) is a mistake and should be done only in special circumstances, while files that grew larger than 500 loc should be refactored if it makes sense. Files over 1k loc have to be split. That's the policy we use at work, and I think it results in a pretty nice and easy to navigate code bases.

Back to the editors, though: as long as the codebase uses a convention - any convention - consistently, you can make it nice to work with, by altering your environment to match the convention. This is where the more configurable and easier to script editors win big time - if there's something in the codebase you don't like, and can't change, you can script it out of sight and out of mind easily. Coming from such an editor, I personally don't have a strong opinion on how the codebase should be structured (which includes the lenghts of files) - I do have some preferences, but I'm not very attached to them. That's just to signal that I'm not the one of people "fascinated" with splitting files for the sake of it :)

Re:Show HN: Imba – I have spent 7 years creating a programmi... by RussianCow on Tuesday August 17, 2021 @05:43PM (#28215218)
> For example, you qualify the "navigating to specific definition" with "within the file", but in my editor jumping to definition across multiple files works exactly the same way as within a single file

If your convention involves using the same name throughout different files (e.g. every component has a `styles` object), this becomes cumbersome to do. (Arguably, that's a problem with the convention, but sometimes you don't have control over this...)

Other than that, I mostly agree with you and fully admit that it's a matter of preference and highly dependent on your workflow; I was just trying to point out that a single file is generally easier to navigate with an out-of-the-box experience in most editors. I also agree with your stance on when to split files, with a small caveat: even when splitting something into multiple files, I still tend to group them by their high-level function as opposed to by "type". In other words, I would rather split a helper component into its own file with its own styling in the same file, rather than split all of the styling into its own file. (Of course, sometimes you really do have 800 lines of styles, in which case they probably need to be in their own file regardless.)

> That being said, I also don't advocate "splitting everything into super small files".

That's great! :) I see this too often in frontend web development, though: people will go out of their way to keep their files as small as possible to an irrational degree—almost as if they are trying to ensure that you can view every file in its entirety without scrolling.

Re:Show HN: Imba – I have spent 7 years creating a programmi... by kingdomcome50 on Tuesday August 17, 2021 @05:15PM (#28214947)
You are only imagining the case when you have already opened/identified all of the files you intend to work on.

Actual workflows diverge significantly from the above. It's a matter of cohesion. Yes, co-locating each of the files (and only these files) in a single "component" directory can help ease navigation and discovery, but most of the time it's just easier to keep everything as cohesive as possible.

Re:Show HN: Imba – I have spent 7 years creating a programmi... by progx on Wednesday August 18, 2021 @04:16AM (#28218773)
Or up and down in one file.