0
votes

I have this setup:

├── bin
│   ├── all.dart
│   ├── details
│   │   ├── script1.dart
│   │   └── script2.dart
|   |    .....

all.dart simply imports script1.dart and script2.dart and calls their main. The goal is to have a bunch of scripts under details that can be run individually. Additionally I want a separate all.dart script that can run them all at once. This will make debugging individual scripts simpler, yet still allowing all to run.

all.dart

import 'details/script1.dart' as script1;
import 'details/script2.dart' as script2;

main() {
  script1.main();
  script2.main();
}

script1.dart

main() => print('script1 run');

script2.dart

main() => print('script2 run');

So, this is working and I see the print statements expected when running all.dart but I have two issues.

First, I have to softlink packages under details. Apparently pub does not propagate packages softlinks down to subfolders. Is this expected or is there a workaround?

Second, there are errors flagged in all.dart at the point of the second import statement. The analyzer error is:

The imported libraries 'script1.dart' and 'script2.dart' should not have the same name ''

So my guess is since I'm importing other scripts as if they are libraries and since they do not have the library script[12]; statement at the top they both have the same name - the empty name?

Note: Originally I had all of these under lib and I could run them as scripts specifying a suitable --package-root on the command line even though they were libraries with main. But then to debug I need to run in Dart Editor, which is why I'm moving them to bin. Perhaps the editor should allow libraries under lib with a main to be run as a script since they run outside the editor just fine? The actual differences between script/library seems a bit unnecessary (as other scripting languages allow files to be both).

How do I clean this up?

1

1 Answers

1
votes

I'm not sure what the actual question is.

  • If a library has not library statement then the empty string is used as a name. Just add a library statement with an unique name to fix this.

  • Adding symlinks to subdirectories solves the problem with the imports for scripts in subdirectories. I do this regularily.
    It was mentioned several times in dartbug.com that symlinks should go away entirely but I have no idea how long this will take.

  • I have never tried to put script files with a main in lib but it is just against the package layout conventions and I guess this is why DartEditor doesn't support it.