从npm命令激活虚拟环境不起作用

时间:2015-08-23 21:18:48

标签: python node.js shell npm pip

在我的package.json我有一个脚本来激活我的python虚拟环境(我的项目使用Python和Nodejs)。我基本上想从npm激活我的虚拟环境。

"scripts": {
    "babel-node": "babel-node --stage 0 --ignore='foo|bar|baz'",
    "test": "export NODE_ENV='test'; ./node_modules/mocha/bin/mocha --compilers js:babel/register server/test/index.js",
    "dev": "./node_modules/nodemon/bin/nodemon.js --exec npm run babel-node -- server/index.js",
    "activate": "source ./venv/bin/activate",

    "import": "python scraper -g -i -db caltrain_test && python ./scraper -g -i",
    "start": "node ./server",
    "docs": "cp README.md docs/index.md && ./node_modules/docco/bin/docco --layout=linear ./docs/index.md"
},

如果我直接从命令行激活我的虚拟环境,它可以工作:

jorgesilvajetter at Jorges-MacBook-Pro-2 in ~/Sites/2015/caltrain-api on master [!?$]
$ source venv/bin/activate
(venv) // This means that it worked!

但是,如果我从npm运行相同的命令,它就不起作用:

jorgesilvajetter at Jorges-MacBook-Pro-2 in ~/Sites/2015/caltrain-api on master [!?$]
$ npm run activate

> caltrain-api@0.0.3 activate /Users/jorgesilvajetter/Sites/2015/caltrain-api
> source ./venv/bin/activate

是否可以通过npm命令激活我的虚拟环境?我似乎误解了虚拟环境如何工作或npm如何执行脚本。也许,它在另一个会话/标签中运行脚本?

1 个答案:

答案 0 :(得分:2)

https://docs.npmjs.com/misc/scripts开始,“通过将行作为脚本参数传递给sh来运行脚本。”所以,虽然您使用的是source,但它位于一个新的子shell中。

只是抬头:npm为./node_modules/.bin添加PATH npm脚本,所以在npm脚本中你可以只写"nodemon"而不是".node_modules/nodemon/bin/nodemon.js"或{ {1}}。 npm知道用正确的脚本填充".node_modules/.bin/nodemon因为包作者在./node_modules/.bin中指定了"bin"属性。