botframework-components
botframework-components copied to clipboard
Optimize package dependencies for generators
@microsoft/[email protected] has a very large dependency tree. This causes installation of the templates in Composer to take ~30 seconds or more, which impacts the overall latency of the bot creation process.
We should evaluate our package dependencies across the full set of generators and determine if we can decrease the overall size of the dependency tree in order to speed up package installation.
A snapshot of the full dependency tree for @microsoft/[email protected] (obtained using npm-remote-ls) is included below for reference:
└─ @microsoft/[email protected]
├─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
│ ├─ @nodelib/[email protected]
│ ├─ [email protected]
│ ├─ @nodelib/[email protected]
│ │ ├─ @nodelib/[email protected]
│ │ │ ├─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ └─ @nodelib/[email protected]
│ │ └─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
├─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ │ └─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ │ ├─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ └─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ └─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ │ ├─ [email protected]
│ │ │ │ │ └─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ │ ├─ [email protected]
│ │ │ │ │ ├─ [email protected]
│ │ │ │ │ ├─ [email protected]
│ │ │ │ │ ├─ [email protected]
│ │ │ │ │ └─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ └─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ └─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ ├─ [email protected]
│ │ │ │ └─ [email protected]
│ │ │ └─ [email protected]
│ │ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
└─ [email protected]
├─ @eslint/[email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
├─ @babel/[email protected]
│ └─ @babel/[email protected]
│ ├─ [email protected]
│ ├─ @babel/[email protected]
│ └─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ │ └─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ │ └─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ └─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
│ └─ [email protected]
├─ [email protected]
├─ [email protected]
│ └─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
├─ [email protected]
├─ [email protected]
│ └─ [email protected]
├─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ │ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ └─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ └─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
├─ [email protected]
├─ [email protected]
│ └─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ └─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
└─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
├─ [email protected]
│ ├─ [email protected]
│ ├─ [email protected]
│ └─ [email protected]
├─ [email protected]
└─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
└─ [email protected]
Some quick evaluation of the direct dependencies within the top-level package:
- The following are all marked as devDependencies, and as such we should ensure that Composer is not trying to install these:
eslinteslint-config-prettiereslint-plugin-prettierprettier
xml2jswas only required while we were generating a NuGet.config to support sourcing RC packages from MyGet. This dependency should be removed.globbyis being used to match template file paths, as utilized in_selectTemplateFilePaths(), and by extension_copyBotTemplateFiles()inbaseGenerator.js. The functionality here is so we can pattern match and replace instances ofbotNamein these file paths with the name supplied to the generator. There may be a more effective way to do this without as many dependencies.yeoman-generatoris listed as a dependency with version range ^1.1.1. The latest packages are in the 5.x.x range at the time of writing. We ought to upgrade to the latest and ensure we are on a consistent package version across our generators - for example,@microsoft/generator-bot-core-assistantalso features a dependency onyeoman-generator, but with a version range of ^2.0.5.
Also of note, our child generators feature a couple of traits that ought to be evaluated:
- In addition to featuring a dependency on
@microsoft/generator-bot-adaptive, they also feature a dependency onyeoman-generator. Not only is there the potential version mismatch issue as outlined above, but we should evaluate if we can simply leverage the version that is pulled in through the base generator dependency. - The child generators also feature a dependency on
yeoman-test. I would think that this ought to be a devDependency and not a regular dependency, as this ought not to be required in order to run the main generators themselves.