如何在 运行 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
文件以及 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 脚本?
不是自动的,不是。您必须先执行 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
自动先运行 pretest
。 Source
我想使用 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
文件以及 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 脚本?
不是自动的,不是。您必须先执行 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
自动先运行 pretest
。 Source