Ejemplo n.º 1
0
    public async Task Update(string rootDirectory, bool includePreviews = false,
                             bool includeReleaseCandidates = false,
                             bool switchToStable           = false, string version = null)
    {
        var fileList = _packageJsonFileFinder.Find(rootDirectory);

        if (!fileList.Any())
        {
            return;
        }

        _npmGlobalPackagesChecker.Check();

        var packagesUpdated = new ConcurrentDictionary <string, bool>();

        async Task UpdateAsync(string file)
        {
            var updated = await UpdatePackagesInFile(file, includePreviews, includeReleaseCandidates,
                                                     switchToStable,
                                                     version);

            packagesUpdated.TryAdd(file, updated);
        }

        Task.WaitAll(fileList.Select(UpdateAsync).ToArray());

        foreach (var file in packagesUpdated.Where(x => x.Value))
        {
            var fileDirectory = Path.GetDirectoryName(file.Key).EnsureEndsWith(Path.DirectorySeparatorChar);

            if (includePreviews)
            {
                await CreateNpmrcFileAsync(Path.GetDirectoryName(file.Key));
            }
            else if (switchToStable)
            {
                await DeleteNpmrcFileAsync(Path.GetDirectoryName(file.Key));
            }

            if (await NpmrcFileExistAsync(fileDirectory))
            {
                RunNpmInstall(fileDirectory);
            }
            else
            {
                RunYarn(fileDirectory);
            }

            if (!IsAngularProject(fileDirectory))
            {
                Thread.Sleep(1000);
                RunInstallLibsAsync(fileDirectory);
            }
        }
    }
Ejemplo n.º 2
0
    private async Task AddNugetAndNpmReferences(ModuleWithMastersInfo module, string[] projectFiles,
                                                bool useDotnetCliToInstall)
    {
        var webPackagesWillBeAddedToBlazorServerProject = SouldWebPackagesBeAddedToBlazorServerProject(module, projectFiles);

        foreach (var nugetPackage in module.NugetPackages)
        {
            var nugetTarget =
                await IsProjectTiered(projectFiles) && nugetPackage.TieredTarget != NuGetPackageTarget.Undefined
                    ? nugetPackage.TieredTarget
                    : nugetPackage.Target;

            if (webPackagesWillBeAddedToBlazorServerProject && nugetTarget == NuGetPackageTarget.Web)
            {
                nugetTarget = NuGetPackageTarget.BlazorServer;
            }

            var targetProjectFile = ProjectFinder.FindNuGetTargetProjectFile(projectFiles, nugetTarget);
            if (targetProjectFile == null)
            {
                Logger.LogDebug($"Target project is not available for this NuGet package '{nugetPackage.Name}'");
                continue;
            }

            await ProjectNugetPackageAdder.AddAsync(null, targetProjectFile, nugetPackage, null, useDotnetCliToInstall);
        }

        var mvcNpmPackages = module.NpmPackages?.Where(p => p.ApplicationType.HasFlag(NpmApplicationType.Mvc))
                             .ToList();

        if (!mvcNpmPackages.IsNullOrEmpty())
        {
            var targetProjects = ProjectFinder.FindNpmTargetProjectFile(projectFiles);
            if (targetProjects.Any())
            {
                NpmGlobalPackagesChecker.Check();

                foreach (var targetProject in targetProjects)
                {
                    foreach (var npmPackage in mvcNpmPackages)
                    {
                        await ProjectNpmPackageAdder.AddMvcPackageAsync(Path.GetDirectoryName(targetProject), npmPackage);
                    }
                }
            }
            else
            {
                Logger.LogDebug("Target project is not available for NPM packages.");
            }
        }
    }