Merge pull request #187 from LeeHyungGeun/bugfix/omi-cli-valid-project-name

Bugfix/omi cli valid project name
This commit is contained in:
当耐特 2018-11-18 12:32:49 +08:00 committed by GitHub
commit db3f7ec460
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 2 deletions

View File

@ -13,6 +13,7 @@ var error = require("./logger").error;
var success = require("./logger").success;
var isCnFun = require("./utils").isCnFuc;
var emptyFs = require("./utils").emptyFs;
var checkAppName = require("./utils").checkAppName;
var isSafeToCreateProjectIn = require("./utils").isSafeToCreateProjectIn;
function init(args) {
@ -30,6 +31,7 @@ function init(args) {
omiCli +
(!isCn ? " will execute init command... " : " 即将执行 init 命令...")
);
checkAppName(projectName);
if (existsSync(dest) && !emptyDir.sync(dest)) {
if (!isSafeToCreateProjectIn(dest, projectName)) {
process.exit(1);
@ -63,7 +65,7 @@ function init(args) {
if (customPrjName) {
try {
var appPackage = require(join(dest,"package.json"));
appPackage.name = customPrjName;
appPackage.name = projectName;
fs.writeFile(join(dest,"package.json"), JSON.stringify(appPackage, null, 2), (err) => {
if (err) return console.log(err);
})

View File

@ -6,6 +6,7 @@ var readdirSync = fs.readdirSync;
var rmdirSync = fs.rmdirSync;
var unlinkSync = fs.unlinkSync;
var statSync = fs.statSync;
var validateProjectName = require('validate-npm-package-name');
function isCnFuc(language) {
return language === "cn" ? true : false;
@ -102,8 +103,34 @@ function isSafeToCreateProjectIn(root, name) {
return true;
}
// validate an app(project) name
// - Nameing Rules: https://www.npmjs.com/package/validate-npm-package-name#naming-rules
// - Referenced: https://github.com/facebook/create-react-app/blob/master/packages/create-react-app/createReactApp.js#L664
function checkAppName(appName) {
const validationResult = validateProjectName(appName);
if (!validationResult.validForNewPackages) {
console.error(
`Could not create a project called ${chalk.red(
`"${appName}"`
)} because of npm naming restrictions: `
);
printValidationResults(validationResult.errors);
printValidationResults(validationResult.warnings);
process.exit(1);
}
function printValidationResults(results) {
if (typeof results !== 'undefined') {
results.forEach(error => {
console.error(chalk.red(` * ${error}`));
});
}
}
}
module.exports = {
isCnFuc: isCnFuc,
emptyFs: emptyFs,
isSafeToCreateProjectIn: isSafeToCreateProjectIn
isSafeToCreateProjectIn: isSafeToCreateProjectIn,
checkAppName: checkAppName
};

View File

@ -37,6 +37,7 @@
"fs-exists-sync": "^0.1.0",
"jsdom": "^9.12.0",
"ora": "^1.1.0",
"validate-npm-package-name": "^3.0.0",
"vinyl-fs": "^2.4.4",
"webpack": "^2.3.3",
"which": "^1.2.14"