晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/lib/node_modules/npm/lib/install/action/ |
| Current File : //lib/node_modules/npm/lib/install/action/extract.js |
'use strict'
const BB = require('bluebird')
const figgyPudding = require('figgy-pudding')
const stat = BB.promisify(require('graceful-fs').stat)
const gentlyRm = BB.promisify(require('../../utils/gently-rm.js'))
const mkdirp = BB.promisify(require('gentle-fs').mkdir)
const moduleName = require('../../utils/module-name.js')
const moduleStagingPath = require('../module-staging-path.js')
const move = require('../../utils/move.js')
const npa = require('npm-package-arg')
const npm = require('../../npm.js')
let npmConfig
const packageId = require('../../utils/package-id.js')
const path = require('path')
const localWorker = require('./extract-worker.js')
const workerFarm = require('worker-farm')
const isRegistry = require('../../utils/is-registry.js')
const WORKER_PATH = require.resolve('./extract-worker.js')
let workers
const ExtractOpts = figgyPudding({
log: {}
}, { other () { return true } })
// Disabled for now. Re-enable someday. Just not today.
const ENABLE_WORKERS = false
extract.init = () => {
if (ENABLE_WORKERS) {
workers = workerFarm({
maxConcurrentCallsPerWorker: npm.limit.fetch,
maxRetries: 1
}, WORKER_PATH)
}
return BB.resolve()
}
extract.teardown = () => {
if (ENABLE_WORKERS) {
workerFarm.end(workers)
workers = null
}
return BB.resolve()
}
module.exports = extract
function extract (staging, pkg, log) {
log.silly('extract', packageId(pkg))
const extractTo = moduleStagingPath(staging, pkg)
if (!npmConfig) {
npmConfig = require('../../config/figgy-config.js')
}
let opts = ExtractOpts(npmConfig()).concat({
integrity: pkg.package._integrity,
resolved: pkg.package._resolved
})
const args = [
pkg.package._requested,
extractTo,
opts
]
return BB.fromNode((cb) => {
let launcher = localWorker
let msg = args
const spec = typeof args[0] === 'string' ? npa(args[0]) : args[0]
args[0] = spec.raw
if (ENABLE_WORKERS && (isRegistry(spec) || spec.type === 'remote')) {
// We can't serialize these options
opts = opts.concat({
loglevel: opts.log.level,
log: null,
dirPacker: null,
Promise: null,
_events: null,
_eventsCount: null,
list: null,
sources: null,
_maxListeners: null,
root: null
})
// workers will run things in parallel!
launcher = workers
try {
msg = JSON.stringify(msg)
} catch (e) {
return cb(e)
}
}
launcher(msg, cb)
}).then(() => {
if (pkg.package.bundleDependencies || anyBundled(pkg)) {
return readBundled(pkg, staging, extractTo)
}
}).then(() => {
return gentlyRm(path.join(extractTo, 'node_modules'))
})
}
function anyBundled (top, pkg) {
if (!pkg) pkg = top
return pkg.children.some((child) => child.fromBundle === top || anyBundled(top, child))
}
function readBundled (pkg, staging, extractTo) {
return BB.map(pkg.children, (child) => {
if (!child.fromBundle) return
if (child.error) {
throw child.error
} else {
return stageBundledModule(pkg, child, staging, extractTo)
}
}, {concurrency: 10})
}
function stageBundledModule (bundler, child, staging, parentPath) {
const stageFrom = path.join(parentPath, 'node_modules', moduleName(child))
const stageTo = moduleStagingPath(staging, child)
return BB.map(child.children, (child) => {
if (child.error) {
throw child.error
} else {
return stageBundledModule(bundler, child, staging, stageFrom)
}
}).then(() => {
return finishModule(bundler, child, stageTo, stageFrom)
})
}
function finishModule (bundler, child, stageTo, stageFrom) {
// If we were the one's who bundled this module…
if (child.fromBundle === bundler) {
return mkdirp(path.dirname(stageTo)).then(() => {
return move(stageFrom, stageTo)
})
} else {
return stat(stageFrom).then(() => gentlyRm(stageFrom), () => {})
}
}
|