2014-06-06 6 views
1

내가Node.js를이

> myapp build "path/to/script.js" 

myapp와는 명령 줄로 전달 된 스크립트를 실행하는 Node.js를 응용 프로그램 외부 스크립트를 실행 Node.js를 가진 명령 줄 인터페이스를 만드는거야 가상 머신 스크립트 모듈을 필요로 논의.

var fs = require("fs"); // this works 
var date = require("./date.js"); // supposed to load "path/to/date.js" but fails 

내 문제가 있음을 require() 아무튼 ': "경로// script.js가"이런 모양 일의

var vm = require("vm"); 
var fs = require("fs"); 

var code = fs.readFileSync(scriptPath, { encoding: "utf8" }); // read "path/to/script.js" 
var script = vm.createScript(code, scriptPath); 
var context = vm.createContext({ require: require }); 

script.runInNewContext(context); 

내용 :
이 간단한 일을 유지하기 위해서는 기본적으로이 수행 외부 스크립트에서 제대로 작동하지 않습니다. fs과 같은 "네이티브"모듈에서는 올바르게 작동하지만 로컬 파일에서는 실패합니다. 아마도 모듈을 찾을 곳을 모르기 때문일 것입니다.

이 나는 ​​단순히 다음 코드를 사용하는 것으로 간주했습니다

require(scriptPath); 

하지만 난 내 자신의 스크립트 컨텍스트를 주입 할 수 없습니다.

나는 비슷한 문제를 해결하기 위해 sandboxed-module을 사용했습니다 내장 필요한 에뮬레이트하지만 scriptPath에서 모듈을 찾고 시작하지만 지루한 조금 보인다 내 자신의 require 기능 ...

+0

var myLib = require ("./ myfile.js"); – dandavis

+0

@dandavis 어떻게 원격 지원에 도움이됩니까 ... – Bart

+0

나는 당신이 지나가고있는 것을 보지 못했습니다. 나는 그것이 가능하다는 것도 몰랐다. 컨텍스트에 대해 {require : bind (this)}를 시도 할 수도 있지만, 아마도 프로세스를 설정해야 할 것입니다. – dandavis

답변

2

을 작성할 수 있습니다.

var Sandbox = require('./sandboxed-module') 
Sandbox.require(scriptPath); 

Sandbox.require 디스크의 코드를로드하고 새로운 컨텍스트에서 실행합니다. require의 작동 방식을 조정할 수있는 샌드 박스 사양의 require 기능을 제공합니다.

+0

감사합니다. NPM에서 직접 검색해야합니다. 나는 sandboxed-module이 의존하는'require-like' 모듈에 대해 정착했고, 내가 찾고있는 모듈에 더 가깝다. – Bart

+0

고마워요. '절실히 요구하는'날 구해 줬어. – AlexG