resolve.coffee | |
---|---|
Module = require('module') | |
joinjoinする extname拡張子名が返る(ドットはついたまま) dirnameディレクトリ名が返る basenamepath.basename('/foo/bar/baz/asdf/quux.html') // returns 'quux.html' path.basename('/foo/bar/baz/asdf/quux.html', '.html') // returns 'quux' resolve絶対パスをつくる | {join, extname, dirname, basename, resolve} = require('path') |
/からはじまるかどうか | isAbsolute = (path) -> /^\//.test(path) |
Normalize paths and remove extensions to create valid CommonJS module names | modulerize = (id, filename = id) ->
ext = extname(filename)
modName = join(dirname(id), basename(id, ext))
modName.replace('\\', '/'); |
現在のディレクトリを_nodeModulePathsに設定 | modulePaths = Module._nodeModulePaths(process.cwd())
invalidDirs = ['/', '.']
repl =
id: 'repl'
filename: join(process.cwd(), 'repl')
paths: modulePaths |
Resolves a | module.exports = (request, parent = repl) -> |
Moduleの内部メソッド _resolveLookupPaths
pathsが帰ってくるので_findPathで探す
dirにfilenameを突っ込んでるのは? | [_, paths] = Module._resolveLookupPaths(request, parent)
filename = Module._findPath(request, paths)
dir = filename
throw("Cannot find module: #{request}. Have you run `npm install .` ?") unless filename |
Find package root relative to localModules folder | while dir not in invalidDirs and dir not in modulePaths
dir = dirname(dir)
throw("Load path not found for #{filename}") if dir in invalidDirs |
filenameからdir部分を削る | id = filename.replace("#{dir}/", '') |
CommonJSのモジュール名とファイル名を返す modulerize参照 | [modulerize(id, filename), filename]
module.exports.paths = (filename) ->
Module._nodeModulePaths(dirname(filename))
module.exports.modulerize = modulerize
|