Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
'use strict';
const gulp = require('gulp');
const build = require('@microsoft/sp-build-web');
const path = require('path');
const bundleAnalyzer = require('webpack-bundle-analyzer');
// https://github.com/SharePoint/sp-dev-docs/blob/master/docs/spfx/toolchain/optimize-builds-for-production.md
build.configureWebpack.mergeConfig({
additionalConfiguration: (generatedConfiguration) => {
const lastDirName = path.basename(__dirname);
const dropPath = path.join(__dirname, 'temp', 'stats');
generatedConfiguration.plugins.push(new bundleAnalyzer.BundleAnalyzerPlugin({
openAnalyzer: false,
analyzerMode: 'static',
reportFilename: path.join(dropPath, `${lastDirName}.stats.html`),
generateStatsFile: true,
statsFilename: path.join(dropPath, `${lastDirName}.stats.json`),
logLevel: 'error'
}));
return generatedConfiguration;
}
});
console.log('[stylelint]: By default style lint errors will not break your build. If you want to change this behaviour, modify failAfterError parameter in gulpfile.js.');
return gulp
.src('src/**/*.scss')
.pipe(stylelint({
failAfterError: false,
reporters: [{
formatter: 'string',
console: true
}]
}));
});
/* end sub task */
build.rig.addPreBuildTask(styleLintSubTask);
/**
* Custom Framework Specific gulp tasks
*/
build.initialize(gulp);
'use strict';
const build = require('@microsoft/sp-build-web');
const common = require("@microsoft/sp-build-common");
const originalBundleTask = build.rig.getBundleTask;
build.rig.getBundleTask = function () {
const originalTask = originalBundleTask.apply(build.rig);
return common.serial(originalTask, serveInfo);
}
const serveInfo = build.subTask('serve-info', (gulp, config, cb) => {
var serveTask = config.uniqueTasks.find((task) => {
return task.name === 'serve' /* SPFx < 1.2.0 */ ||
task.name === 'spfx-serve' /* SPFx >= 1.2.0 */ ;
});
var url = `http${serveTask.taskConfig.https ? 's' : ''}://${serveTask.taskConfig.hostname}:${serveTask.taskConfig.port}/temp/manifests.js`;
for (var key in config.properties.manifests) {
var manifest = config.properties.manifests[key];
if (manifest.componentType !== 'Extension') {
continue;
}
console.log(`${manifest.alias}:`);
switch (manifest.extensionType) {
case "ApplicationCustomizer":
console.log(`?loadSPFX=true&debugManifestsFile=${url}&customActions={"${manifest.id}":{"location":"ClientSideExtension.ApplicationCustomizer","properties":{"property":"this is data"}}}`);
break;
'use strict';
const build = require('@microsoft/sp-build-web');
const common = require("@microsoft/sp-build-common");
const originalBundleTask = build.rig.getBundleTask;
build.rig.getBundleTask = function () {
const originalTask = originalBundleTask.apply(build.rig);
return common.serial(originalTask, serveInfo);
}
const serveInfo = build.subTask('serve-info', (gulp, config, cb) => {
var serveTask = config.uniqueTasks.find((task) => {
return task.name === 'serve' /* SPFx < 1.2.0 */ ||
task.name === 'spfx-serve' /* SPFx >= 1.2.0 */ ;
});
var url = `http${serveTask.taskConfig.https ? 's' : ''}://${serveTask.taskConfig.hostname}:${serveTask.taskConfig.port}/temp/manifests.js`;
for (var key in config.properties.manifests) {
var manifest = config.properties.manifests[key];
if (manifest.componentType !== 'Extension') {
continue;
}
console.log(`${manifest.alias}:`);
switch (manifest.extensionType) {
case "ApplicationCustomizer":
console.log(`?loadSPFX=true&debugManifestsFile=${url}&customActions={"${manifest.id}":{"location":"ClientSideExtension.ApplicationCustomizer","properties":{"prop1":"val1"}}}`);
break;
}));
return generatedConfiguration;
}
});
/**
* StyleLinter configuration
* Reference and custom gulp task
*/
const stylelint = require('gulp-stylelint');
/* Stylelinter sub task */
let styleLintSubTask = build.subTask('stylelint', (gulp) => {
console.log('[stylelint]: By default style lint errors will not break your build. If you want to change this behaviour, modify failAfterError parameter in gulpfile.js.');
return gulp
.src('src/**/*.scss')
.pipe(stylelint({
failAfterError: false,
reporters: [{
formatter: 'string',
console: true
}]
}));
});
/* end sub task */
build.rig.addPreBuildTask(styleLintSubTask);
'use strict';
const build = require('@microsoft/sp-build-web');
const sppkgDeploy = require('node-sppkg-deploy');
const environmentInfo = {
"username": "",
"password": "",
"tenant": "",
"catalogSite": ""
};
build.task('deploy-sppkg', {
execute: (config) => {
environmentInfo.username = config.args['username'] || environmentInfo.username;
environmentInfo.password = config.args['password'] || environmentInfo.password;
environmentInfo.tenant = config.args['tenant'] || environmentInfo.tenant;
environmentInfo.catalogSite = config.args['catalogsite'] || environmentInfo.catalogSite;
const pkgFile = require('./config/package-solution.json');
if (pkgFile) {
// Retrieve the filename from the package solution config file
let filename = pkgFile.paths.zippedPackage;
// Remove the solution path from the filename
filename = filename.split('/').pop();
// Retrieve the skip feature deployment setting from the package solution config file
const skipFeatureDeployment = pkgFile.solution.skipFeatureDeployment ? pkgFile.solution.skipFeatureDeployment : false;
// Deploy the SharePoint package
return sppkgDeploy.deploy({
const fs = require('fs');
// Update the version number in the version.ts file
gulp.task('versionUpdater', (done) => {
const pkgContents = require('./package.json');
const filePath = './src/common/telemetry/version.ts';
const fileContents = `export const version: string = "{versionPlaceholder}";`;
const newContents = fileContents.replace("{versionPlaceholder}", pkgContents.version);
console.log(`Updating version number to: ${pkgContents.version}`);
fs.writeFileSync(filePath, newContents, { encoding: "utf8" });
done();
});
build.initialize(gulp);
const karmaTask = build.karma;
if (karmaTask) {
karmaTask.taskConfig.configPath = './config/karma.config.js';
}
reporters: [{
formatter: 'string',
console: true
}]
}));
});
/* end sub task */
build.rig.addPreBuildTask(styleLintSubTask);
/**
* Custom Framework Specific gulp tasks
*/
build.initialize(gulp);
'use strict';
const gulp = require('gulp');
const build = require('@microsoft/sp-build-web');
build.addSuppression(`Warning - [sass] The local CSS class 'ms-Grid' is not camelCase and will not be type-safe.`);
// Fix image references - thanks Waldek!
// https://blog.mastykarz.nl/correctly-reference-images-sharepoint-framework-solutions/
build.configureWebpack.mergeConfig({
additionalConfiguration: (generatedConfiguration) => {
if (build.getConfig().production) {
var basePath = build.writeManifests.taskConfig.cdnBasePath;
if (!basePath.endsWith('/')) {
basePath += '/';
}
generatedConfiguration.output.publicPath = basePath;
}
else {
generatedConfiguration.output.publicPath = "/dist/";
}
return generatedConfiguration;
build.addSuppression(`Warning - [sass] The local CSS class 'ms-Grid' is not camelCase and will not be type-safe.`);
// Create clean distrubution package
gulp.task('dist', gulpSequence('clean', 'bundle', 'package-solution'));
// Create clean development package
gulp.task('dev', gulpSequence('clean', 'bundle', 'package-solution'));
/**
* Webpack Bundle Anlayzer
* Reference and gulp task
*/
const bundleAnalyzer = require('webpack-bundle-analyzer');
build.configureWebpack.mergeConfig({
additionalConfiguration: (generatedConfiguration) => {
const lastDirName = path.basename(__dirname);
const dropPath = path.join(__dirname, 'temp', 'stats');
generatedConfiguration.plugins.push(new bundleAnalyzer.BundleAnalyzerPlugin({
openAnalyzer: false,
analyzerMode: 'static',
reportFilename: path.join(dropPath, `${lastDirName}.stats.html`),
generateStatsFile: true,
statsFilename: path.join(dropPath, `${lastDirName}.stats.json`),
logLevel: 'error'
}));
return generatedConfiguration;
}