[英]Node.js command line with folder name as parameter
我正在查看https://github.com/mars/heroku-cra-node github repo,我注意到在package.json
,有一个定义为"start": node server
的脚本"start": node server
(服务器是包含 index.js 文件的文件夹)。
这条线到底有什么作用? 当我们将文件夹名称作为参数传递时,节点会在该文件夹内搜索文件index.js
吗?
简短的回答是,是的。
长答案: package.json
被npm识别。 只要你的机器上安装了 npm,你就可以用它来做很多事情,比如安装 NodeJS 模块,但你也可以用它来运行小脚本/命令。 这些命令必须添加到package.json
的scripts
字段下。 要运行这些命令,您可以调用npm run <command>
。 此功能是为了方便起见,与包管理没有任何关系。 话虽如此,这里有一些钩子可以在将包发布到npmjs.com时被调用(稍后会详细介绍)。
NodeJS 将在导入任何文件夹时搜索并导入index.js
(此处 Node 可能正在使用 CommonJS,但我 100% 不确定)。 因此,在您的示例中,通过调用npm start
,您正在调用 npm,它正在调用运行server/index.js
node server
。 你可以在这里调用任何你想要的东西,例如,你可以通过创建一个脚本"my-script": "my-script.sh"
来启动一个 shell 脚本,然后通过 npm 使用npm run my-script
调用它。 这是一个简单的例子,但不是一个非常有用的例子——当你有复杂的命令需要定期运行时,npm-scripts 就派上用场了。
例如,您可以使用不同的命令来运行具有不同上下文的程序:
{
"scripts": {
"start": "set NODE_ENV=development&& webpack --watch",
"clean": "rimraf dist",
"build-production": "set NODE_ENV=production&& npm run clean && webpack",
"deploy": "sam deploy"
}
}
npm start
进行开发npm run build-production
打包生产构建npm run deploy
将代码部署到服务器请注意,在上一段中,我只是使用了npm start
,而不是之前描述的npm run start
- 保留的脚本名称具有额外的功能,请参阅npm-scripts页面以获取完整详细信息。
当无法找到确切的文件时,Node 将进行有限的搜索。
在提供server
作为node
的“脚本”参数的情况下:
第一个node
将尝试打开名为server
的文件。
如果没有找到,那么它将寻找server.js
, server.json
然后server.node
如果这些不存在并且参数是一个目录, node
将尝试打开server/index.js
、 server/index.json
然后server/index.node
。
第一场比赛获胜。
$ strace -e stat node server
syscall_332(0xffffff9c, 0x7ffeca72d028, 0, 0xfff, 0x7ffeca72cc10, 0x7ffeca72cd20) = -1 (errno 38)
stat("/server", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/server.js", 0x7ffeca72cc90) = -1 ENOENT (No such file or directory)
stat("/server.json", 0x7ffeca72cc90) = -1 ENOENT (No such file or directory)
stat("/server.node", 0x7ffeca72cc90) = -1 ENOENT (No such file or directory)
stat("/server/index.js", 0x7ffeca72cbe0) = -1 ENOENT (No such file or directory)
stat("/server/index.json", 0x7ffeca72cbe0) = -1 ENOENT (No such file or directory)
stat("/server/index.node", 0x7ffeca72cbe0) = -1 ENOENT (No such file or directory)
stat("/server", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/server.js", 0x7ffeca72cad0) = -1 ENOENT (No such file or directory)
stat("/server.json", 0x7ffeca72cad0) = -1 ENOENT (No such file or directory)
stat("/server.node", 0x7ffeca72cad0) = -1 ENOENT (No such file or directory)
stat("/server/index.js", 0x7ffeca72ca20) = -1 ENOENT (No such file or directory)
stat("/server/index.json", 0x7ffeca72ca20) = -1 ENOENT (No such file or directory)
stat("/server/index.node", 0x7ffeca72ca20) = -1 ENOENT (No such file or directory)
internal/modules/cjs/loader.js:896
throw err;
^
Error: Cannot find module '/server'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:893:15)
at Function.Module._load (internal/modules/cjs/loader.js:743:27)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
+++ exited with 1 +++
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.