目次
物事は次のようなものです。直接話しましょう
总结
ホームページ 見出し インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!

インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!

Apr 13, 2022 pm 05:28 PM
node npm

面接官が、npm run xxx を実行すると何が起こったかを尋ねたら、どう答えますか?次の記事では、面接の体験談と著者の答え方を紹介していますので、ぜひ参考にしてください。

物事は次のようなものです。直接話しましょう

インタビュアー: npm が xxx を実行すると何が起こりましたか?詳細であればあるほど良いです。

私 (思考的、単純): まず、DNS 解決を行い、ドメイン名を IP アドレスに解決します。 TCP 接続、TCP スリーウェイ ハンドシェイク...

インタビュアー: やめて、URL 入力からページ表示までに何が起こるかを聞いているわけではありません。 、npm が xxx を実行すると何が起こったか。

インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!

私 (恥ずかしくて、反射的に質問だと思いました): うーん、npm で xxx を実行するときに、最初にプロジェクトの package.json ファイルに移動することを覚えています。スクリプト内で対応する xxx を見つけて、xxx​​ のコマンドを実行します。たとえば、vue プロジェクト npm runserve を起動すると、実際には vue-cli-serviceserve コマンドが実行されます。 (幸運なことに、私はこの常識をまだ理解しています)

package.json ファイル

{
  "name": "h5",
  "version": "1.0.7",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve"
   },
}
ログイン後にコピー

インタビュアー: そうですね、悪くないです。それなら直接実行してみてはいかがでしょうかvue-cli-serviceserveしかし、npm runserve を実行するとどうなるでしょうか?

私 (ためらっています): うーん、npm runserve の方が短くて書きやすいからです。

インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!

インタビュアー: もう一度考えてください。

私 (ああ?そうですよね? はい、思い出しました): vue-cli-serviceserve を直接実行すると、エラーが報告されるためです。 vue-cli-serviceこの手順

インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!

インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!

インタビュアー: ああ、はい、はい、はい、はい、はい、ヨーヨーウェスト!

私 (ふふ、しっかりしてる、今度は 30,000 欲しい): ふふふ!

インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!

インタビュアー:

vue-cli-service このコマンドはオペレーティング システムに存在しないため、なぜ npm runserve## を実行するのですか? #、これは vue-cli-serviceserve を実行するのと同じですが、なぜ成功するのに、コマンドが存在しないというエラーが報告されないのでしょうか? 私 (え?サメをあげてみませんか。無理に答えたくないのですが): ごめんなさい、まだ理解できていません。

インタビュアー: えーっと、わかりました、それは問題ではありません。次のアルゴリズムの質問をしましょう:....

....

以下は関係ありませんこの記事へ 内容は省略されています。

面接官: はい、これで面接は終了です。面接結果は 1 週間以内にご返信いたします

ピーピーピー...(電話を切る)

# ##良い。クールなようです。

npm runserve

を実行すると成功し、コマンドが存在しないというエラーが報告されないのはなぜですか?

私はすぐに上司の友人にこのプロセスで何が起こったのか尋ねました

#いくつかの議論の後、ついに答えを見つけました。

インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください! 負けを認めたくない私は、すぐに面接官の電話番号に掛け直しました。

私: こんにちは、インタビュアーさん、答えが見つかりました。もう一度聞いていただけますか?

インタビュアー: はい、はい、お話しください。

私: 依存関係をインストールするとき、npm i xxx を通じて実行します。たとえば、

npm i @vue/cli-service

、npm がこの依存関係をインストールすると、いくつかの実行可能ファイルが作成されます。

vue-cli-service

という名前のファイルが node_modules/.bin/ ディレクトリに作成されました。

インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!

.bin ディレクトリ。このディレクトリは npm パッケージではありません。ディレクトリ内のファイルはソフト リンクであることを示しており、ファイルを開くと、ファイルの先頭に

#!/bin/shインタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください! と書かれており、これがスクリプトであることがわかります。

これから、vue-cli-service# は実行されませんが、npm runserve

を使用して

vue-cli-serviceserve を実行することがわかります。 ## グローバル コマンドがインストールされていますが、npm は ./node_modules/.binvue-cli-service ファイルを見つけてスクリプトとして実行します。これは ## を実行するのと同じです。 #. /node_modules/.bin/vue-cli-serviceserve (最後のサーブはパラメータとして渡されます)。 <p>面试官:可以啊,真不错,但是我还想继续问问,你说.bin 目录下的文件表示软连接,那这个bin目录下的那些软连接文件是哪里来的呢?它又是怎么知道这条软连接是执行哪里的呢?</p><p>我(窃喜,这个我们刚刚也讨论了):我们可以直接在新建的vue项目里面搜索vue-cli-service</p><p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/image/436/923/317/1649990074656960.png" class="lazy" title="164999006926942インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!" alt="インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!"/></p><p>可以看到,它存在项目最外层的<strong>package-lock.json</strong>文件中</p><p>从 package-lock.json 中可知,当我们npm i 整个新建的vue项目的时候,npm 将 bin/vue-cli-service.js 作为 bin 声明了。</p><p>所以在 npm install 时,npm 读到该配置后,就将该文件软链接到 ./node_modules/.bin 目录下,而 npm 还会自动把node_modules/.bin加入$PATH,这样就可以直接作为命令运行依赖程序和开发依赖程序,不用全局安装了。</p><p>假如我们在安装包时,使用 <code>npm install -g xxx 来安装,那么会将其中的 bin 文件加入到全局,比如 create-react-app 和 vue-cli ,在全局安装后,就可以直接使用如 vue-cli projectName 这样的命令来创建项目了。

面试官:搜噶,也就是说,npm i 的时候,npm 就帮我们把这种软连接配置好了,其实这种软连接相当于一种映射,执行npm run xxx 的时候,就会到 node_modules/bin中找对应的映射文件,然后再找到相应的js文件来执行。

我(疯狂点头):嗯嗯,是的,就是这样

面试官:我有点好奇。刚刚看到在node_modules/bin中 有三个vue-cli-service文件。为什么会有三个文件呢?

インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!

我:如果我们在 cmd 里运行的时候,windows 一般是调用了 vue-cli-service.cmd,这个文件,这是 windows 下的批处理脚本:

@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0

IF EXIST "%dp0%\node.exe" (
  SET "_prog=%dp0%\node.exe"
) ELSE (
  SET "_prog=node"
  SET PATHEXT=%PATHEXT:;.JS;=;%
)

endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\@vue\cli-service\bin\vue-cli-service.js" %*
ログイン後にコピー

所以当我们运行vue-cli-service serve这条命令的时候,就相当于运行 node_modules/.bin/vue-cli-service.cmd serve

然后这个脚本会使用 node 去运行 vue-cli-service.js这个 js 文件

由于 node 中可以使用一系列系统相关的 api ,所以在这个 js 中可以做很多事情,例如读取并分析运行这条命令的目录下的文件,根据模板生成文件等。

# unix 系默认的可执行文件,必须输入完整文件名
vue-cli-service

# windows cmd 中默认的可执行文件,当我们不添加后缀名时,自动根据 pathext 查找文件
vue-cli-service.cmd

# Windows PowerShell 中可执行文件,可以跨平台
vue-cli-service.ps1
ログイン後にコピー

面试官:原来如此,不错嘛小伙子,短短时间内就掌握清楚了,看来学习能力很强,不错不错,我很看好你,我会催hr尽快回复你的。先这样了,拜拜

我(欣喜若狂,功夫不负有心人啊):好啊,好啊,拜拜

哔哔哔...(电话挂断)

过了三十分钟....

今天是个好日子,心想的事儿都能成,今天是个好日子,打开了家门咱迎春风...(手机铃声响起)。

我:喂,您好。

hr:您好,我是xxx公司的hr,根据你面试的优秀表现,恭喜你获得了我司的offer,经过我最大的努力,我给你争取到了最大的薪资,薪资是月薪3500,您看满意吗?

我:....

哔哔哔....(电话挂断)

tmd,c

1インタビュアー: npm が xxx を実行すると何が起こりましたか?話し始めてください!

总结

  • 运行 npm run xxx的时候,npm 会先在当前目录的 node_modules/.bin 查找要执行的程序,如果找到则运行;

  • 没有找到则从全局的 node_modules/.bin 中查找,npm i -g xxx就是安装到到全局目录;

  • 如果全局目录还是没找到,那么就从 path 环境变量中查找有没有其他同名的可执行程序。

原文地址:https://juejin.cn/post/7078924628525056007

作者:阳光是sunny

更多node相关知识,请访问:nodejs 教程

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

npm Reactインストールエラーが発生した場合の対処方法 npm Reactインストールエラーが発生した場合の対処方法 Dec 27, 2022 am 11:25 AM

npm 反応インストール エラーの解決策: 1. プロジェクトで「package.json」ファイルを開き、依存関係オブジェクトを見つけます; 2. 「react.json」を「devDependency」に移動します; 3. ターミナルで「npm Audit」を実行します -- Production」を実行して警告を修正します。

Express を使用してノード プロジェクトでファイルのアップロードを処理する方法 Express を使用してノード プロジェクトでファイルのアップロードを処理する方法 Mar 28, 2023 pm 07:28 PM

ファイルのアップロードをどのように処理するか?次の記事では、Express を使用してノード プロジェクトでファイルのアップロードを処理する方法を紹介します。

nvmでノードを削除する方法 nvmでノードを削除する方法 Dec 29, 2022 am 10:07 AM

nvm でノードを削除する方法: 1. 「nvm-setup.zip」をダウンロードして C ドライブにインストールします; 2. 「nvm -v」コマンドで環境変数を構成し、バージョン番号を確認します; 3. 「nvm」を使用しますinstall" コマンド ノードのインストール; 4. "nvm uninstall" コマンドでインストールしたノードを削除します。

Nodeのプロセス管理ツール「pm2」を徹底分析 Nodeのプロセス管理ツール「pm2」を徹底分析 Apr 03, 2023 pm 06:02 PM

この記事では、Node のプロセス管理ツール「pm2」について説明し、pm2 が必要な理由、pm2 のインストール方法と使用方法について説明します。皆様のお役に立てれば幸いです。

PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? Mar 05, 2025 pm 05:57 PM

ピン張りのノードの詳細な説明とインストールガイドこの記事では、ピネットワークのエコシステムを詳細に紹介します - PIノードは、ピン系生態系における重要な役割であり、設置と構成の完全な手順を提供します。 Pinetworkブロックチェーンテストネットワークの発売後、PIノードは多くの先駆者の重要な部分になり、テストに積極的に参加し、今後のメインネットワークリリースの準備をしています。まだピン張りのものがわからない場合は、ピコインとは何かを参照してください。リストの価格はいくらですか? PIの使用、マイニング、セキュリティ分析。パインワークとは何ですか?ピン競技プロジェクトは2019年に開始され、独占的な暗号通貨PIコインを所有しています。このプロジェクトは、誰もが参加できるものを作成することを目指しています

pkg を使用して Node.js プロジェクトを実行可能ファイルにパッケージ化する方法について説明します。 pkg を使用して Node.js プロジェクトを実行可能ファイルにパッケージ化する方法について説明します。 Dec 02, 2022 pm 09:06 PM

Nodejs実行可能ファイルをpkgでパッケージ化するにはどうすればよいですか?次の記事では、pkg を使用して Node プロジェクトを実行可能ファイルにパッケージ化する方法を紹介します。

npm ノード gyp が失敗した場合の対処方法 npm ノード gyp が失敗した場合の対処方法 Dec 29, 2022 pm 02:42 PM

「node-gyp.js」が「Node.js」のバージョンと一致しないため、npm node gyp が失敗します。解決策は次のとおりです: 1. 「npm cache clean -f」を使用してノード キャッシュをクリアします; 2. 「npm install -」を使用します。 g n" n モジュールをインストールします。 3. 「n v12.21.0」コマンドを使用して、「node v12.21.0」バージョンをインストールします。

ノードがnpmコマンドを使用できない場合はどうすればよいですか? ノードがnpmコマンドを使用できない場合はどうすればよいですか? Feb 08, 2023 am 10:09 AM

ノードが npm コマンドを使用できない理由は、環境変数が正しく設定されていないためです。解決策は次のとおりです: 1. 「システムのプロパティ」を開きます; 2. 「環境変数」->「システム変数」を見つけて、環境を編集します。変数; 3.nodejs フォルダーの場所を見つけます; 4.「OK」をクリックします。