Maison > interface Web > js tutoriel > le corps du texte

Découvrez ensemble Nodejs et les programmes en ligne de commande

青灯夜游
Libérer: 2021-05-27 11:37:34
avant
2161 Les gens l'ont consulté

Cet article vous présentera Nodejs et les programmes en ligne de commande. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Découvrez ensemble Nodejs et les programmes en ligne de commande

La création est sans voix mais a des sentiments Chaque fois que le froid arrive, le printemps naît. Des milliers d’arrangements rouges et violets attendent le premier son d’un nouveau tonnerre. —— "New Thunder" de Qing Zhang Weiping

Origine

Programmes ancrés dans l'environnement système Unix, dont beaucoup implémentent la philosophie de conception du système Unix en tant que poursuite. Douglas McIlroy, l'inventeur du mécanisme de pipeline du système Unix, a résumé la philosophie Unix en trois points :

  • Concentrez-vous sur une chose et faites-la à l'extrême.

  • Les programmes fonctionnent ensemble.

  • est destiné aux interfaces courantes, telles que les flux de données texte.

Avec l'influence croissante des systèmes Unix/Linux sur les serveurs et le développement de diverses solutions multiplateformes, cette philosophie a également été appliquée à diverses plateformes. Il y a plusieurs années, lorsque j'ai découvert NodeJS et sa solution de gestion de paquets NPM, j'ai senti que son style officiellement préconisé était très cohérent avec la philosophie du système Unix. Ces dernières années, alors que NodeJS continue de se développer dans le domaine de la construction côté serveur et front-end, les idées de NodeJS pénètrent rapidement dans ces domaines.

En fait, NodeJS lui-même est également un outil important pour développer des programmes en ligne de commande. Cet article présentera plusieurs programmes de ligne de commande liés à NodeJS couramment utilisés, puis présentera plusieurs composants couramment utilisés dans la ligne de commande de développement et enfin présentera comment publier des packages npm et des packages avec portée.

[Apprentissage recommandé : "Tutoriel nodejs"]

Comment fonctionne la ligne de commande

La ligne de commande peut être simple Il est défini comme une interface d'interaction utilisateur et une méthode d'interaction basée sur le flux de texte. Les programmes de ligne de commande s'exécutent souvent de différentes manières en transmettant des paramètres de ligne de commande. Et comme toutes les commandes sont émises sur la base de texte, cela facilite également la métaprogrammation.

Les programmes en ligne de commande peuvent être compilés et exécutés, ou ils peuvent être interprétés et exécutés. Le programme de ligne de commande compilé sera exécuté directement en code machine. Pour la plupart des programmes de ligne de commande interprétés, leur exécution nécessite souvent l'aide d'un interpréteur de ligne de commande.

Le programme de ligne de commande mentionné dans cet article fait spécifiquement référence au programme de ligne de commande qui nécessite un interpréteur.

peut être utilisé comme interpréteur de ligne de commande, qui comprend en fait des interprètes courants dont tout le monde a entendu parler, tels que bash, zsh, perl, python, ruby, tcl, etc., et bien sûr NodeJS.

Ouvrez un programme en ligne de commande. La méthode standard d'écriture est d'écrire le chemin du programme interpréteur sur la première ligne, par exemple :

#!/usr/local/opt/python/bin/python3.6
Copier après la connexion

Ici #! devient le shebang, qui est généralement situé au tout début du fichier. Sur les systèmes Unix, la partie suivant la ligne contenant #! est traitée comme une directive d'interprétation. Dans le même temps, le chemin d’accès au fichier sera ajouté à l’interpréteur en tant que paramètre. Dans l'exemple ci-dessus, si le fichier est /usr/local/bin/pip, l'effet de l'exécution directe de /usr/local/bin/pip est équivalent à /usr/local/opt/python/bin/python3.6 /usr/local/bin/pip.

De cette façon, l'utilisateur n'a pas besoin de se soucier du programme d'interprétation ou du langage dans lequel le code est écrit, et peut directement exécuter lui-même le programme de ligne de commande correspondant. C'est aussi le sens de l'existence du shebang. Cependant, en raison des paramètres système, les étudiants utilisant Windows peuvent ne pas pouvoir profiter de cette commodité et doivent généralement spécifier manuellement le chemin d'accès à l'interpréteur. Cependant, ils peuvent être exécutés d'un double clic :-).

Vous pouvez essayer d'utiliser un outil d'édition de texte pour ouvrir un script écrit en NodeJS, tel que : webpack, et vous constaterez que la première ligne est #!/usr/bin/env node. Cette phrase n'est pas un analyseur NodeJS direct. Ici, /usr/bin/env est un programme dont le but est de trouver l'adresse de l'interprète correspondant au nom issu du PATH du système. À l'heure actuelle, l'interpréteur peut être installé dans différents chemins et peut être trouvé tant qu'il est enregistré dans le PATH du système.

Peut-être avez-vous rencontré ce problème. Lors de l'exécution de certains programmes NodeJS, un message d'erreur apparaîtra :

/usr/bin/env: node: No such file or directory

À ce stade, vous pouvez vérifier s'il existe un problème. nœud dans le système PATH Ce chemin de fichier, si certaines versions de NodeJS sont nommées nœud, etc., peut être utilisé pour résoudre le problème.

Connexe à NodeJS : outils de ligne de commande utiles

Avec NodeJS devenant désormais le langage principal pour le flux de travail frontal, babel et webpack sont fondamentalement C'est devenu un outil important pour le développement front-end, les tests et la publication. Dans le même temps, il existe une série de boîtes à outils périphériques et de plug-ins autour de babel et webpack pour aider les développeurs à réaliser tous les aspects du développement quotidien.

Dans le même temps, les frameworks front-end les plus populaires Angular, React et Vue (par ordre alphabétique) disposent chacun de leurs propres outils d'échafaudage et d'aide au développement. Tels que ng-cli, create-react-app et vue-cli etc. Il existe également des outils d'échafaudage comme Poi qui fonctionnent à la fois avec React et Vue.

Chacune des parties ci-dessus peut être expliquée indépendamment. Les lecteurs intéressés peuvent se référer aux sites Web officiels des outils ci-dessus pour plus d'informations.

Parlons de plusieurs autres progiciels liés à NodeJS.

Coexistence multi-versions n/nvm

Dans la plupart des cas, nous n'avons besoin de faire face qu'à une seule version de NodeJS. Le moment venu, mettez à niveau la version de NodeJS vers une version supérieure.

Cependant, l'auteur a été confronté un jour à une situation où un projet qui était en mauvais état depuis longtemps devait être maintenu. À ce stade, vous devez passer la version de NodeJS à l'ancienne version. Dans le même temps, nous ne voulons pas abandonner la nouvelle version de l’environnement NodeJS sur laquelle s’exécutent la plupart des projets.

Dans ce cas vous pouvez utiliser n ou nvm. La figure ci-dessous montre le processus d'utilisation de n pour télécharger et passer à une nouvelle version.

Découvrez ensemble Nodejs et les programmes en ligne de commande

En plus du téléchargement, n fournit également une méthode de liste pour basculer entre plusieurs versions et une méthode pour supprimer une certaine version. Les lecteurs peuvent utiliser n -h pour afficher tous les paramètres disponibles après l'installation.

n est écrit en bash. Cependant, il fournit une entrée à l'installation de l'entrepôt npm. Vous pouvez utiliser la méthode d'installation npm traditionnelle pour une installation globale, le principe est que vous devez disposer d'un environnement NodeJS pouvant s'exécuter.

npm install -g n

Ou s'il n'y a pas d'environnement NodeJS, vous pouvez utiliser le script n-install. Pour installer, exécutez simplement : curl -L https://git.io/n-install | bash.

Si vous êtes un utilisateur Windows, vous pouvez installer wsl sous Windows 10 pour obtenir l'environnement d'exécution du script Linux. Un problème dans l'entrepôt officiel a une instruction d'opération.

Pour les utilisateurs sous Windows 10, vous pouvez envisager de l'essayer Cygwin.

En plus de n, il existe également un outil de gestion appelé nvm, qui est également écrit en script bash. L'installation peut également être effectuée à l'aide d'un script d'installation. Tels que : curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash ou wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash. v0.34.0 voici le numéro de version, qui peut changer avec les itérations de version.

Les lecteurs qui utilisent Windows, en plus des wsl et Cygwin ci-dessus, peuvent envisager d'utiliser la version nvm-windows écrite en Golang.

En ce qui concerne la dernière version, n et nvm essaieront de gérer les bibliothèques publiques dépendantes, mais les méthodes de traitement sont différentes.

n et nvm téléchargeront cette version de NodeJS localement lors de la première utilisation d'une certaine version. La différence est la suivante : n essaiera de remplacer le chemin système par la nouvelle version. , inclure, partager le package. nvm conserve une copie de chaque version et pointe le chemin du système NodeJS vers l'adresse du bac à sable gérée par .nvm.

En termes de traitement, nvm semble être plus léger et efficace, mais il doit modifier le PATH du système. Cette étape sera complétée automatiquement par le script nvm. n, il n'est pas nécessaire d'envahir le chemin du système, mais le chemin du système d'exploitation est requis à chaque fois qu'il est modifié, et il est préférable d'utiliser sudo n pour exécuter à ce moment-là pour éviter de se voir refuser la copie sur le chemin du système en raison à des autorisations insuffisantes.

Puisque nvm modifiera l'adresse PATH, si nvm et n sont installés par défaut en même temps, n ne fonctionnera pas correctement. Une solution consiste à éviter l'installation simultanée. De plus, vous pouvez modifier manuellement PATH afin que le chemin NodeJS par défaut précède le chemin du système nvm. Par exemple, modifiez le fragment PATH en :

/usr/local/bin:/Users/leon/.nvm/versions/node/v10.6.0/bin:

<. 🎜>

Auxiliaire d'exécution nodemon/npx

nodemon est un exécuteur, ce qui signifie que si la version change ou le programme change, il n'est pas nécessaire de redémarrer. Ceci est très utile lors du développement.

nodemon peut également spécifier le port à exécuter, tel que :

nodemon ./server.js localhost 8080

En plus de contrôler les packages NodeJS, nodemon peut également contrôler les scripts non-NodeJS, tels que comme : <🎜 >, surveillera le contenu de app.py et appellera

pour une analyse au début et lorsque des changements se produisent. Bien sûr, si votre app.py spécifie le shebang, vous n'avez pas besoin de spécifier la fonction d'analyse. nodemon --exec "python -v" ./app.pypython -v

Découvrez ensemble Nodejs et les programmes en ligne de commandenodemon dispose de nombreuses configurations flexibles. Grâce à ces configurations, vous pouvez implémenter des paramètres de variables d'environnement, un démarrage différé, l'exécution de commandes, la surveillance d'extensions personnalisées, un redémarrage progressif, une surveillance des événements et autres. fonctions. La méthode consiste à fournir la configuration pertinente

dans le répertoire qui nécessite ces configurations, ou vous pouvez la spécifier via le champ

dans package.json. nodemon.json

这里是官方提供的一份配置文件的样例,供读者参考。

再来说说npx。什么是npx呢?简单说,就是找到并运行一个包,并且“用完即走”。

这里有两层意思:

  • 找到。从哪里找:先是当前的依赖,然后是PATH,还找不到就到网上找来安装。

  • 用完即走。即使从网上安装的,运行完就会删掉,不会留下运行的包。 读者可以试着运行下:npx github:piuccio/cowsay "awesome npx"体验下。

这实在是居家旅行、开发调试的利器。比如我要在当前目录下开一个http服务,可以直接运行:npx http-server

Découvrez ensemble Nodejs et les programmes en ligne de commande

之后就可以直接在浏览器访问这个地址进行调试了。

另外,如果你需要临时用一个老版本的node来运行某个脚本,也可以祭出npx,这个node会被临时安装、临时使用、用完即走。

npx -p node@6 npm init

切换NodeJS注册表 nrm/yrm

nrm/yrm维护了一个列表,包括npm主站和其他镜像。可以使用nrm/yrm use 快速切换,以达到最快的下载速度。nrm维护的是npm的注册表,yrm维护的是yarn注册表。

Découvrez ensemble Nodejs et les programmes en ligne de commande

辅助编写NodeJS包

除了直接用大神们写好的命令之外,我们也可以按照自己的需求定制自己需要的NodeJS包。我们知道,命令行其实也是一种人机交互,因此,交互上有很多可以借鉴的效果。编写者只需将包倒入就可以使用这些交互效果。这里笔者给大家推荐几个包

命令行参数读取 commander

命令行的一个特点就是根据参数的不同调整运行策略。然而处理命令行输入以及验证是一个非常繁琐的事情。为此,TJ大神曾经创立了commander包。最基础的用法如下:

var program = require(&#39;commander&#39;);

program
  .version(&#39;0.1.0&#39;)
  .option(&#39;-p, --peppers&#39;, &#39;Add peppers&#39;)
  .option(&#39;-P, --pineapple&#39;, &#39;Add pineapple&#39;)
  .option(&#39;-b, --bbq-sauce&#39;, &#39;Add bbq sauce&#39;)
  .option(&#39;-c, --cheese [type]&#39;, &#39;Add the specified type of cheese [marble]&#39;, &#39;marble&#39;)
  .parse(process.argv);

console.log(&#39;you ordered a pizza with:&#39;);
if (program.peppers) console.log(&#39;  - peppers&#39;);
if (program.pineapple) console.log(&#39;  - pineapple&#39;);
if (program.bbqSauce) console.log(&#39;  - bbq&#39;);
console.log(&#39;  - %s cheese&#39;, program.cheese);
Copier après la connexion

默认地,commander会自动创建-h的帮助文件,即利用每一个option的输入产生帮助文案。

Découvrez ensemble Nodejs et les programmes en ligne de commande

用户的每一个输入,都会放置在program对应option长名的字段的驼峰形式上,如果没有提供长名,则放在短名字段上。上例中,如使用: testcommander -p 111 -P 222 -b 333则依次存储在programpepperspineapplebbqSauce上。

同时,commander提供多种验证方式,如正则表达式:

program.option(&#39;-s --size <size>&#39;, &#39;Pizza size&#39;, /^(large|medium|small)$/i, &#39;medium&#39;)

则指定只能输入特定的值。

同时,commander提供一个方案,允许用户设置子命令。commander称之为Git风格的子命令。

var program = require(&#39;commander&#39;);

program
  .version(&#39;0.1.0&#39;)
  .command(&#39;install [name]&#39;, &#39;install one or more packages&#39;)
  .command(&#39;search [query]&#39;, &#39;search with optional query&#39;)
  .command(&#39;list&#39;, &#39;list packages installed&#39;, {isDefault: true})
  .parse(process.argv);
Copier après la connexion

这个例子中,假设命令行名字为pm,则当用户输入pm-installpm-searchpm-list时候,commander会尝试在入口文件的同一级目录找到installsearchlist,并交给这个文件去执行。

进度条 progress

在编写web程序时候,大家经常会展示一个进度条。用以缓解用户在等待时候的焦虑。其实在命令行程序中也会有这种交互方式。比如wget就会在下载过程中给出进度提示。

在NodeJS中也有这样的效果可以使用。这就是progress包。下面的代码,运行结果是下载CentOS安装盘。在下载之中,会实时打印进度

const ProgressBar = require("progress")
const request = require("request")
const progress = require("request-progress")
const fs = require("fs")

const download = (url, headers, target, totalSize) => {
    let percent = 0

    const bar = new ProgressBar(&#39;下载中: ├:bar┤ 完成:percent 预估完成时间:eta秒 用时:elapseds&#39;, {
        total: 100,
        complete: "█",
        incomplete: "─",
        width: 60
    })

    let opt = {
        headers,
        url: url
    }

    return new Promise((resolve, reject) => {
        progress(request.get(opt))
            .on(&#39;progress&#39;, function (state) {
                let progressFix = ((state.percent) * 100).toFixed(2)
                delta = progressFix - percent
                bar.tick(delta)
                percent = progressFix
            })
            .on("error", () => {
                return reject()
            })
            .on(&#39;end&#39;,  () => {
                bar.tick(100 - percent)
                console.log(&#39;\n&#39;)
                return resolve(target)
            })
            .pipe(fs.createWriteStream(target));
    })
}

const foo = {
    getHeaders: () => {
        const headers = {
            &#39;Accept&#39;: &#39;text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&#39;,
            &#39;Accept-Charset&#39;: &#39;UTF-8,*;q=0.5&#39;,
            &#39;Accept-Encoding&#39;: &#39;gzip,deflate,sdch&#39;,
            &#39;Accept-Language&#39;: &#39;en-US,en;q=0.8&#39;,
            &#39;User-Agent&#39;: &#39;Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0&#39;
        }

        return Object.assign({}, headers)
    },

    download: function (url, target, totalSize){
        let headers = this.getHeaders()
        headers = Object.assign(headers)

        download(url, headers, target, totalSize)
    }
}


foo.download("http://mirrors.cmich.edu/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso",
    "CentOS-7-x86_64-DVD-1810.iso", 4508876.8
    )
Copier après la connexion

运行的结果如图:

Découvrez ensemble Nodejs et les programmes en ligne de commande

这个包的核心就是根据内置和自定义的token在命令行打印出相应的字符,用以完成交互。

交互着色 chalk

chalk是一个命令行交互的着色工具。在命令行支持的情况下,可以支持最多16位色域(前提是命令行终端可以支持)。一般可以配合console.log使用,如:

const chalk = require(&#39;chalk&#39;);
const log = console.log;

// Combine styled and normal strings
log(chalk.blue(&#39;Hello&#39;) + &#39; World&#39; + chalk.red(&#39;!&#39;));
Copier après la connexion

笔者曾经做过一个在命令行下显示图片的程序,就是利用的chalk和console.log进行的配合。

Découvrez ensemble Nodejs et les programmes en ligne de commande

交互式问答 inquirer

在需要不断的同用户进行交互式问答,并根据用户的输入进行验证和路径选择,这个时候inquirer是非常趁手的工具。它内置了单选、多选、问答等多种交互方式。大家可以感受下:

Découvrez ensemble Nodejs et les programmes en ligne de commande

Découvrez ensemble Nodejs et les programmes en ligne de commande

Découvrez ensemble Nodejs et les programmes en ligne de commande

Découvrez ensemble Nodejs et les programmes en ligne de commande

1Découvrez ensemble Nodejs et les programmes en ligne de commande

1Découvrez ensemble Nodejs et les programmes en ligne de commande

甚至可以通过插件实现suggest

Découvrez ensemble Nodejs et les programmes en ligne de commande

vue框架的脚手架vue-cli是一个使用inquire的绝佳案例,读者可以通过阅读源码,感受下大神出神入化的使用。

小图标 ora

ora打印出一个优雅的文本小图标,用于在各种情况下给出用户优雅而清晰的提示。用法很简单:

const ora = require(&#39;ora&#39;);

const spinner = ora(&#39;Loading unicorns&#39;).start();

setTimeout(() => {
	spinner.color = &#39;yellow&#39;;
	spinner.text = &#39;Loading rainbows&#39;;
}, 1000);
Copier après la connexion

Découvrez ensemble Nodejs et les programmes en ligne de commande

命令行玩浏览器 puppeteer

puppeteer是谷歌开发的无头浏览器,使得命令行亦可操作浏览器,并能根据浏览器的执行结果进行进一步操控。因为puppeteer源自官方,所以之前类似项目PhantomJS的开发者决定不再更新PhantomJS。

目前puppeteer已经广泛用于前端测试,端对端测试,以及爬虫。

鉴于篇幅无法展开介绍,读者可以参考其官方文档。同时,奇舞周刊中黄小璐老师的的这篇文章以及李光钊老师的这篇文章都曾经介绍过puppeteer的使用。

发布NodeJS包

写好的NodeJS包需要发布出去,才能给大家使用。npm publish就是为了这个需求而产生的。为了发布你需要在npm上注册用户,并登录,然后发布就好了。npm的详情页面以及各个镜像会在一段时间内自动更新。

如果你的NodeJS包,是使用尚未广泛支持的语法写成的。那么需要在package.json的script字段加入prepublish命令,调用babel等预编译器处理,使得程序可以有更多的兼容性。

对于希望用户在全局使用的命令,要注意在根目录写好入口,一般是在package.json中的bin字段,指定入口文件。在安装时,如果是全局安装,npm将会使用符号链接把这些文件链接到prefix/bin,如果是本地安装,会链接到./node_modules/.bin/。

除了通常的包,还有一种是带有scope的包,vue-cli的3.0版本就是@vue开头的。这个scope是组织的名字。每一个带有scope的包有公有和私有之分,私有的需要付费给npm。

目前npm的读写权限策略如下:

1Découvrez ensemble Nodejs et les programmes en ligne de commande

如果是个人,可以考虑增加公有的命名空间。如果是企业付费用户,你在发布相关包之前,需要申请成为这个scope的member。

对公有scope,首先将包的name改为@scope名字/包名,同时,在发布时,使用npm publish --access public即可。

小结

本文简述了命令行的意义和优势,介绍了解释型命令行的运行机制,同时介绍了几个NodeJS相关的命令行工具,推荐了几款撰写命令行程序常用的包,最后,概述了发布包和使用scope的发布情况。希望给大家的NodeJS命令行相关开发和技术选型,提供一些有用的帮助。

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

作者:刘观宇

更多编程相关知识,请访问:编程视频!!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!