An error that is easy to run into, is mistakingly adding components to the flowsheet later on in the code (e.g. after you've already processed some streams). This will inevitably result in hard to understand errors.
To avoid this, perhaps an easy 'fix' is to provide an overloaded constructor like this:
function Flowsheet(components::Vector{AbstractString})
fs = Flowsheet()
readcomponentlist!(fs, "./components", components)
end