UNPKG

vincent-cli

Version:

基于vue全家桶的脚手架,主要包含webapp、一般网页的模板。

95 lines (81 loc) 2.04 kB
const path = require('path') const metadata = require('read-metadata') const exists = require('fs').existsSync const getGitUser = require('./git-user') const validateName = require('validate-npm-package-name') /** * 读取metadata参数 * * @param {String} dir * @return {Object} */ module.exports = function options(name, dir) { const opts = getMetadata(dir) setDefault(opts, 'name', name) setValidateName(opts) const author = getGitUser() if (author) { setDefault(opts, 'author', author) } return opts } /** * 从meta.js、meta.json中获取metadata数据 * * @param {String} dir * @return {Object} */ function getMetadata (dir) { const json = path.join(dir, 'meta.json') const js = path.join(dir, 'meta.js') let opts = {} if (exists(json)) { opts = metadata.sync(json) } else if (exists(js)) { const req = require(path.resolve(js)) if (req !== Object(req)) { throw new Error('meta.js needs to expose an object') } opts = req } return opts } /** * 从prompt question中设置默认值。例如:需要安装的eslint时,配置上eslint * * @param {Object} opts * @param {String} key * @param {String} val */ function setDefault (opts, key, val) { if (opts.schema) { opts.prompts = opts.schema delete opts.schema } const prompts = opts.prompts || (opts.prompts = {}) if (!prompts[key] || typeof prompts[key] !== 'object') { prompts[key] = { 'type': 'string', 'default': val } } else { prompts[key]['default'] = val } } /** * 设置在npm有效的包名 * @param {Object} opts */ function setValidateName (opts) { const name = opts.prompts.name const customValidate = name.validate name.validate = name => { const its = validateName(name) if (!its.validForNewPackages) { const errors = (its.errors || []).concat(its.warnings || []) return 'Sorry, ' + errors.join(' and ') + '.' } if (typeof customValidate === 'function') return customValidate(name) return true } }