Published on
·1 min read

preinstall中的七七八八

一、概述

preinstall 是 npm script 中的钩子,还有个 postinstall,执行顺序如下,两个对比来看

  • preinstall
  • install
  • postinstall

二、preinstall & postinstall

区别及可以做什么

  • 见名知意,post 是在 npm install 之后执行,pre 是在 npm install 之前执行
  • preinstall 只会在 npm install 的时候执行,其他 npm 命令不会触发,postinstall 除了在 npm install 的时候触发,还会在 npm install xxx,npm update 的时候执行
  • 在 preinstall 可以做一些前置的准备工作,例如检查 node、npm 的环境,安装相关依赖等,postinstall 可以做一些编译和初始化脚本的工作

三、一些优化点

Shebang(Hashbang)的添加

  • 计算领域中,Shebang(也称为Hashbang)是一个由井号叹号构成的字符序列*#!,其出现在文本文件的第一行的前两个字符。 在文件中存在 Shebang 的情况下,类 Unix 操作系统程序加载器会分析 Shebang 后的内容,将这些内容作为解释器指令,并调用该指令,并将载有 Shebang 的文件路径作为该解释器的参数[1][2]。例如,以指令#!/bin/sh开头的文件在执行时会实际调用/bin/sh*程序(通常是Bourne shell或兼容的shell,例如bashdash等)来执行。这行内容也是shell 脚本的标准起始行。由于#符号在许多脚本语言中都是注释标识符,Shebang 的内容会被这些脚本解释器自动忽略。 在#字符不是注释标识符的语言中,例如Scheme,解释器也可能忽略以#!开头的首行内容,以提供与 Shebang 的兼容性[3]。"Shebang"或者说"Hashbang"的名字有时也被当做Ajax应用程序中的分段标识符,用于浏览器的状态保存;Google 网站站长中心提到,以叹号开头的分段标识符(即...url#!state...)会为 Google 的网页爬虫所索引。

在脚本前面加上#!/usr/bin/env node

添加 #!/usr/bin/env node 到脚本的第一行,告诉操作系统使用 Node.js 解释器来执行该脚本。这样做的好处是,通过直接执行脚本文件,而不需要在命令行中显式指定解释器,使得脚本更加方便和可执行。

例如,使用 #!/usr/bin/env node 可以让您通过 ./script.js 直接执行脚本,而不需要使用 node script.js。

只在脚本调用时才会执行 main,而 require 导入时不会执行 main

if (require.main === module) {
  main()
}
// main中执行你需要执行的相关逻辑

四、可以参考的文章