sa-template-1
Version:
83 lines (73 loc) • 4.28 kB
JavaScript
;
const project = '../../';
const fs = require('fs');
const path = require('path');
const ncp = require('ncp');
if (path.basename(path.resolve(__dirname, '../')) !== 'node_modules') process.exit();
const templateJSON = require('./package.json');
const packageJSON = require(`${project}package.json`);
const DEV = packageJSON && packageJSON.name === 'sa-source';
/* update readme */
if (!fs.existsSync(path.resolve(__dirname, project, 'readme.md'))) {
ncp.ncp(path.resolve(__dirname, 'readme.md'), path.resolve(__dirname, project, 'readme.md'), error => error ? console.error('\x1b[31m%s\x1b[0m', `Error: ${error}`) : console.info('Success: readme updated'));
}
/* update task-runner */
ncp.ncp(path.resolve(__dirname, 'gulpfile.js'), path.resolve(__dirname, project, 'gulpfile.js'), error => error ? console.error('\x1b[31m%s\x1b[0m', `Error: ${error}`) : console.info('Success: task-runner updated'));
/* update stylelint */
if (!fs.existsSync(path.resolve(__dirname, project, '.stylelintrc'))) {
ncp.ncp(path.resolve(__dirname, '.stylelintrc'), path.resolve(__dirname, project, '.stylelintrc'), error => error ? console.error('\x1b[31m%s\x1b[0m', `Error: ${error}`) : console.info('Success: stylelint updated'));
}
/* update eslint */
if (!fs.existsSync(path.resolve(__dirname, project, '.eslintrc'))) {
ncp.ncp(path.resolve(__dirname, '.eslintrc'), path.resolve(__dirname, project, '.eslintrc'), error => error ? console.error('\x1b[31m%s\x1b[0m', `Error: ${error}`) : console.info('Success: eslint updated'));
}
/* update tasks */
ncp.ncp(path.resolve(__dirname, 'tasks'), path.resolve(__dirname, project, 'tasks'), error => error ? console.error('\x1b[31m%s\x1b[0m', `Error: ${error}`) : console.info('Success: tasks updated'));
/* update package.json */
delete templateJSON.dependencies.ncp;
const scripts = {
start: 'gulp serve',
build: 'gulp build --production',
module: 'node node_modules/sa-template-1/module.js',
'lint-css': 'stylelint src/**/*.scss -f verbose --fix',
'lint-js': 'eslint src/**/*.js --fix'
};
const json = {
browserslist: templateJSON.browserslist,
...packageJSON,
scripts: {
...packageJSON.scripts,
...scripts
},
devDependencies: {
...packageJSON.devDependencies,
...(!DEV ? templateJSON.dependencies : {})
},
config: {
devServer: templateJSON.config.devServer,
entries: templateJSON.config.entries,
browsers: templateJSON.config.browsers,
...packageJSON.config,
directories: {
...templateJSON.config.directories,
...(packageJSON.config && packageJSON.config.directories ? packageJSON.config.directories : {}),
tasks: {
...templateJSON.config.directories.tasks,
...(packageJSON.config && packageJSON.config.directories && packageJSON.config.directories.tasks ? packageJSON.config.directories.tasks : {})
}
},
tasks: [ ...new Set([ ...(packageJSON.config && packageJSON.config.tasks ? packageJSON.config.tasks : []), ...templateJSON.config.tasks ]) ]
}
};
fs.writeFile(path.resolve(__dirname, project, 'package.json'), JSON.stringify(json, null, 2), 'utf8', error => error ? console.error('\x1b[31m%s\x1b[0m', `Error: ${error}`) : console.info('Success: package.json updated'));
/* update gitignore */
const gitignore = [ 'node_modules', 'build', 'tmp', '.vscode', '*.log', 'Thumbs.db', '.idea', '.grunt', '.DS_Store', 'bash.exe.stackdump', '.editorconfig', '.yo-rc.json' ];
const writeGitIgnore = (data, newData = []) => {
fs.writeFile(path.resolve(__dirname, project, '.gitignore'), [ ...new Set([ ...data, ...newData ]) ].join('\r\n'), 'utf8', error => error ? console.error('\x1b[31m%s\x1b[0m', `Error: ${error}`) : console.info('Success: gitignore updated'));
};
if (fs.existsSync(path.resolve(__dirname, project, '.gitignore'))) {
fs.readFile(path.resolve(__dirname, project, '.gitignore'), 'utf8', (error, data) => {
if (error) return console.error('\x1b[31m%s\x1b[0m', `Error: ${error}`);
writeGitIgnore(data.split('\r\n'), gitignore);
});
} else writeGitIgnore(gitignore);