@@ -2,6 +2,9 @@ const path = require(`path`);
22const { spinner, chalk, constants, access } = require ( `./utils` ) ;
33const { setConfig, config } = require ( `./config` ) ;
44const fetch = require ( `node-fetch` ) ;
5+ const { checkInstalledPackages } = require ( `./packageDetection` ) ;
6+ const prompts = require ( `prompts` ) ;
7+ const { checkForYarnPackage } = require ( `./yarnPackageHelper` ) ;
58const { readFile } = require ( `fs` ) . promises ;
69
710const detectDownloadsAndStars = async ( ) => {
@@ -60,6 +63,7 @@ const detectProjectType = async () => {
6063
6164const detectPackageManager = async ( ) => {
6265 spinner . start ( ` 💻 Detecting package manager... ` ) ;
66+ spinner . stop ( ) ;
6367 try {
6468 if ( config . quickStart ) {
6569 spinner . stopAndPersist ( {
@@ -70,23 +74,72 @@ const detectPackageManager = async () => {
7074 : `${ chalk . bold . greenBright ( `NPM` ) } `
7175 } set by cli arguments \n`
7276 } ) ;
77+ await checkForYarnPackage ( ) ;
7378 return ;
7479 }
75- await access ( `yarn.lock` , constants . R_OK ) ;
76- config . packageManager = `yarn` ;
7780 } catch ( error ) {
7881 config . packageManager = `npm` ;
79- }
80- if ( ! config . quickStart ) {
8182 spinner . stopAndPersist ( {
8283 symbol : `📦` ,
83- text : ` ${ chalk . bold . yellow (
84+ text : ` Exception Occured! falling back to ${ chalk . bold . blueBright (
8485 config . packageManager . toUpperCase ( )
85- ) } detected \n`
86+ ) } \n`
8687 } ) ;
8788 }
88- } ;
8989
90+ if ( ! config . quickStart ) {
91+ const installedPackages = await checkInstalledPackages ( ) ;
92+ if ( installedPackages . length === 2 ) {
93+ spinner . stopAndPersist ( {
94+ symbol : `📂` ,
95+ text : `Detected Yarn & NPM ... \n`
96+ } ) ;
97+ const choosePackageManager = await prompts ( [
98+ {
99+ name : `packageManager` ,
100+ message : `Which package manager do you want to use ? (Strapi Recommends yarn)` ,
101+ type : `select` ,
102+ choices : [
103+ {
104+ title : `Yarn` ,
105+ value : `yarn` ,
106+ } ,
107+ {
108+ title : `NPM` ,
109+ value : `npm` ,
110+ } ,
111+ ]
112+ }
113+ ] ) ;
114+ config . packageManager = choosePackageManager [ `packageManager` ] ;
115+ spinner . stopAndPersist ( {
116+ symbol : `\n📦` ,
117+ text : `Using ${ chalk . bold . blueBright (
118+ config . packageManager . toUpperCase ( )
119+ ) } \n`
120+ } ) ;
121+ return ;
122+ } else {
123+ try {
124+ await access ( `yarn.lock` , constants . R_OK ) ;
125+ config . packageManager = `yarn` ;
126+ if ( ! installedPackages . includes ( `yarn` ) ) {
127+ await checkForYarnPackage ( ) ;
128+ }
129+ return ;
130+ } catch ( error ) {
131+ config . packageManager = `npm` ;
132+ }
133+ spinner . stopAndPersist ( {
134+ symbol : `📦` ,
135+ text : ` ${ chalk . bold . yellow (
136+ config . packageManager . toUpperCase ( )
137+ ) } detected \n`
138+ } ) ;
139+ return ;
140+ }
141+ }
142+ } ;
90143const detectStrapiProject = async ( ) => {
91144 spinner . start ( ` 💻 Detecting Strapi project... ` ) ;
92145 try {
0 commit comments