我想将npm
用于简单构建(受this article启发)。我的script
中有一个单行package.json
,它依赖于节点模块(markdown-pdf
)通过require(而不是二进制文件)。
我的测试设置是一个项目目录,其中包含一个package.json
文件以及npm
和node
的最新版本:
$ echo "npm: $(npm -v), node: $(node -v)"
npm: 1.4.28, node: v0.10.35
$ ls -a
./ ../ package.json
这是我的package.json
:
{
"name": "mytest",
"version": "0.0.1",
"devDependencies": {
"markdown-pdf": "latest"
},
"scripts": {
"test": "node -e \"require('markdown-pdf');\""
}
}
npm test
失败,因为在test
脚本运行之前未安装所需的模块:
$ npm test
> mytest@0.0.1 test /Users/me/mytest
> node -e "require('markdown-pdf');"
module.js:340
throw err;
^
Error: Cannot find module 'markdown-pdf'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at [eval]:1:1
at Object.<anonymous> ([eval]-wrapper:6:22)
at Module._compile (module.js:456:26)
at evalScript (node.js:559:25)
at startup (node.js:80:7)
at node.js:929:3
npm ERR! Test failed. See above for more details.
npm ERR! not ok code 0
是否可以使单个package.json
文件中的JavaScript脚本可以使用依赖项?
答案 0 :(得分:4)
这可能不是npm的使用方式,但这应该有效
{
"name": "mytest",
"version": "0.0.1",
"devDependencies": {
"markdown-pdf": "latest"
},
"scripts": {
"pretest": "npm install",
"test": "node -e \"require('markdown-pdf');\""
}
}
正在运行npm test
会自动运行pretest
。 Source
答案 1 :(得分:1)
不是自动化,不是。您必须首先npm install .
安装devDependencies
中的模块,除非您将devDependencies
模块与模块捆绑在一起。
答案 2 :(得分:1)
这可能是滥用npm
的意图,但package.json
这样做了:
{
"name": "mytest",
"version": "0.0.1",
"devDependencies": {
"markdown-pdf": "latest"
},
"scripts": {
"test": "npm install && node -e \"require('markdown-pdf');\""
}
}
非常简单。