可执行文件
创建一个可执行文件
提示
nodejs 已经安装在目标 机器操作系统内
创建一个文件
touch hello在文件里 打印
helloconsole.log("hello");让文件可执行
chmod +x hello用
node执行文件node hello用
node执行不够 cool可执行文件
将下面的文本放到文件头部, 它叫做 Shebang
- zsh shell
#!node- normal shell
#!/usr/bin/env node执行
./hello必须带上执行路径不够 cool
注册路径
将
hello文件路径注册到pathzsh
将文件路径加入到
~/.zshrc文件中path+=pwd # pwd 代表 hello 的路径重新加载
.zshrcsource ~/.zshrc或者
. ~/.zshrc
现在可以到任何目录下执行
hello🆒
可执行文件 包含依赖包
操作
如果我们想在 文件里面 调用其他
Node模块import fs from "fs";首先需要 让项目支持
ESMnpm init -y更新
package.json支持import语法{ "name": "xxx", "type": "module" }现在依然执行会报错
npm i esm在
hello文件头部shebang增加一点trick#!/usr/bin/env node -r esm嗯, 现在可以在 当前目录下执行
hello等等, 如果 我们换一个位置执行
hello还是会报告Cannot find module 'esm'那么我们需要 继续更新
shebang, 增加NODE_PATH的指定#!/usr/bin/env -S NODE_PATH=[pwd]/node_modules node -r esm -r globals现在你可以在任何目录下执行
hellocd ~ hello还有一些小问题 当前 目录下会生成一个
node_modules文件夹 这是cache文件ESM_DISABLE_CACHE flag 看起来就是为了解决这个问题
#!/usr/bin/env -S NODE_PATH=[pwd]/node_modules ESM_OPTIONS='{mode:"auto",cache:0}' node -r esm -r globals我们看看
esm的issues或者tests里面是不是有方案How 🆒 is that
回顾一下
zsh执行 了hello文件, 它通过文件头部shebang知道用node来执行 文件, 此外并且增加了 一些列的 flags-S NODE_PATH=...- 指定 node path 从而找到依赖包安装的位置
-S ESM_OPTIONS=...- 命令执行后 去掉在当前目录下生成的缓存文件
-r esm- --require module
- Preload the specified module at startup.
- --require module
-r globals- 同上
可执行文件 扩展
top level
await默认情况下
await不可以在 函数外 声明{ "name": "xxx", "type": "module", "dependencies": { "esm": "3.2.25" }, "esm": { "await": true } }global utilities
增加一些 全局对象 方便 编写
cli脚本