@pnp/generator-spfx
Version:
This Yeoman generator helps organisations to improve their development workflow with the SharePoint Framework. It extends the functionalities of the @microsoft/generator-sharepoint based on best pattern and practices. This generator extends the capabiliti
182 lines (168 loc) • 4.12 kB
JavaScript
const chalk = require('chalk');
const utils = require('../../lib/util');
// jQuery version options
const jqueryOptions = [{
'name': '3.x.x (recommended)',
'value': 3
},
{
'name': '2.x.x',
'value': 2
}
]
const ouifrOptions = [{
'name': '7.x.x',
'value': '7'
},
{
'name': '6.x.x',
'value': '6'
}, {
'name': '6.x.x incl. Fluent Theme',
'value': '6fluent'
}
]
const rushCompilerOption = [{
'name': 'TypeScript v3.3 - Default',
'value': 'rush@3.3',
default: true
},
{
'name': 'TypeScript v3.4',
'value': 'rush@3.4'
},
{
'name': 'TypeScript v3.5',
'value': 'rush@3.5'
},
{
'name': 'TypeScript v3.6',
'value': 'rush@3.6'
},
{
'name': 'TypeScript v3.7',
'value': 'rush@3.7'
},
{
'name': 'TypeScript v3.8',
'value': 'rush@3.8'
},
{
'name': 'TypeScript v3.9',
'value': 'rush@3.9'
}
]
// ReactJS libraries only
const reactLibs = [{
name: 'PnP Reusable Controls',
value: '@pnp/spfx-controls-react'
}, {
name: 'Office UI Fabric',
value: 'ouifr'
}];
// Vetting options
const vettingOptions = [{
name: 'WebPack Bundle Analyzer',
value: 'webpack-analyzer'
},
{
name: 'Style Linter',
value: 'stylelint'
},
{
name: 'CSS Comb',
value: 'csscomb'
}
];
// continuous integrations options
const ciOptions = [{
name: 'None',
value: 'no-devops'
}, {
name: 'Azure DevOps',
value: 'azure'
},
{
name: 'Azure DevOps Multi-Stage Pipeline with deployment (preview)',
value: 'azure-preview'
}
];
// SharePoint Online supported libraries
const spoLibs = [{
name: 'jQuery',
value: 'jquery@3'
}, {
name: 'Microsoft Graph - Type Definitions',
value: 'msgraph'
}, {
name: 'Microsoft Graph ToolKit',
value: 'msgt'
}, {
name: 'pnpjs',
value: '@pnp/pnpjs'
}, {
name: 'PnP Property Controls',
value: '@pnp/spfx-property-controls'
},
{
name: 'spfx-uifabric-themes - enhanced theming support',
value: 'spfx-uifabric-themes'
},
{
name: 'lodash',
value: 'lodash'
}
// Add a new configuration object in here
]
// generat configuration options
const configOptions = [
// Library selection
{
type: 'checkbox',
message: 'Which libraries to include ?',
name: 'jsLibrary',
choices: answers => {
let defaultLibs = [];
// Select supported libraries base on environment
if (answers.spfxenv) {
defaultLibs = spoLibs;
if (answers.framework === 'react' ||
answers.framework === 'reactjs.plus'
) {
defaultLibs = defaultLibs.concat(reactLibs)
}
}
return defaultLibs;
}
},
{
type: 'list',
message: `${chalk.bold.yellow('Office UI Fabric: ')} Please choose a version:`,
name: 'ouifrVersion',
choices: ouifrOptions,
// Show only when jQuery was included
when: answers => answers.jsLibrary !== undefined && answers.jsLibrary.indexOf('ouifr') !== -1
},
{
type: 'list',
message: `${chalk.bold.yellow('TypeScript: ')} Please choose a version:`,
name: 'typescript',
choices: rushCompilerOption,
when: answers => answers.spfxenv !== undefined && answers.spfxenv === 'spo'
},
// Vetting and code style options
{
type: 'checkbox',
message: 'Vetting Options',
name: 'vetting',
choices: vettingOptions
},
{
type: 'list',
message: 'Include pipeline configuration?',
name: 'continuousIntegration',
choices: ciOptions
}
]
// export options as module
module.exports = configOptions;