晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/lib/node_modules/npm/lib/install/ |
| Current File : //lib/node_modules/npm/lib/install/validate-args.js |
'use strict'
var validate = require('aproba')
var asyncMap = require('slide').asyncMap
var chain = require('slide').chain
var npmInstallChecks = require('npm-install-checks')
var iferr = require('iferr')
var checkEngine = npmInstallChecks.checkEngine
var checkPlatform = npmInstallChecks.checkPlatform
var npm = require('../npm.js')
module.exports = function (idealTree, args, next) {
validate('OAF', arguments)
var force = npm.config.get('force')
asyncMap(args, function (pkg, done) {
chain([
[hasMinimumFields, pkg],
[checkSelf, idealTree, pkg, force],
[isInstallable, idealTree, pkg]
], done)
}, next)
}
function hasMinimumFields (pkg, cb) {
if (pkg.name === '' || pkg.name == null) {
return cb(new Error(`Can't install ${pkg._resolved}: Missing package name`))
} else if (pkg.version === '' || pkg.version == null) {
return cb(new Error(`Can't install ${pkg._resolved}: Missing package version`))
} else {
return cb()
}
}
function setWarnings (idealTree, warn) {
function top (tree) {
if (tree.parent) return top(tree.parent)
return tree
}
var topTree = top(idealTree)
if (!topTree.warnings) topTree.warnings = []
if (topTree.warnings.every(i => (
i.code !== warn.code ||
i.required !== warn.required ||
i.pkgid !== warn.pkgid))) {
topTree.warnings.push(warn)
}
}
var isInstallable = module.exports.isInstallable = function (idealTree, pkg, next) {
var force = npm.config.get('force')
var nodeVersion = npm.config.get('node-version')
if (/-/.test(nodeVersion)) {
// for the purposes of validation, if the node version is a prerelease,
// strip that. We check and warn about this sceanrio over in validate-tree.
nodeVersion = nodeVersion.replace(/-.*/, '')
}
var strict = npm.config.get('engine-strict')
checkEngine(pkg, npm.version, nodeVersion, force, strict, iferr(next, thenWarnEngineIssues))
function thenWarnEngineIssues (warn) {
if (idealTree && warn) setWarnings(idealTree, warn)
checkPlatform(pkg, force, next)
}
}
function checkSelf (idealTree, pkg, force, next) {
if (idealTree.package && idealTree.package.name !== pkg.name) return next()
if (force) {
var warn = new Error("Wouldn't install " + pkg.name + ' as a dependency of itself, but being forced')
warn.code = 'ENOSELF'
idealTree.warnings.push(warn)
next()
} else {
var er = new Error('Refusing to install package with name "' + pkg.name +
'" under a package\n' +
'also called "' + pkg.name + '". Did you name your project the same\n' +
'as the dependency you\'re installing?\n\n' +
'For more information, see:\n' +
' <https://docs.npmjs.com/cli/install#limitations-of-npms-install-algorithm>')
er.code = 'ENOSELF'
next(er)
}
}
|