如何在运行npm脚本之前加载依赖项?

时间:2015-01-24 19:35:46

标签: node.js build npm

我想将npm用于简单构建(受this article启发)。我的script中有一个单行package.json,它依赖于节点模块(markdown-pdf)通过require(而不是二进制文件)。

我的测试设置是一个项目目录,其中包含一个package.json文件以及npmnode的最新版本:

$ 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脚本可以使用依赖项?

3 个答案:

答案 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会自动运行pretestSource

答案 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');\""
  }
}

非常简单。