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

How to load dependencies before running npm scripts?

我想使用 npm 通过 require(不是二进制文件)进行简单构建(受 this article). I have a single, one-line script in my package.json that depends on a node module (markdown-pdf 启发)

我的测试设置是一个项目目录,其中包含一个 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 脚本?

不是自动的,不是。您必须先执行 npm install . 才能在 devDependencies 中安装模块,除非您将 devDependencies 模块与您的模块捆绑在一起。

这可能是对 npm 的使用方式的滥用,但是 package.json 做到了:

{
  "name": "mytest",
  "version": "0.0.1",
  "devDependencies": {
    "markdown-pdf": "latest"
  },
  "scripts": {
    "test": "npm install && node -e \"require('markdown-pdf');\""
  }
}

非常简单。

这可能不是 npm 的本意使用方式,但这应该有效

{
  "name": "mytest",
  "version": "0.0.1",
  "devDependencies": {
    "markdown-pdf": "latest"
  },
  "scripts": {
    "pretest": "npm install",
    "test": "node -e \"require('markdown-pdf');\""
  }
}

运行 npm test 自动先运行 pretestSource