NodeJS プロジェクトで ES6 を使用する方法
この記事では主に NodeJS プロジェクトで ES6 をエレガントに使用する方法を詳しく紹介します。興味のある方は参考にしてください。
最新バージョンの NodeJ は ES6 (ES2015) の新機能のサポートを開始しており、設定ではすでに async/await などのより高度な機能をサポートしています。使用する場合のみ、node: --harmony の後にパラメータを追加する必要があります。ただし、それでもノードはすべての ES6 機能をサポートしているわけではありません。したがって、現時点では Babel を使用する必要があります。
プロジェクトアドレス: https://github.com/future-challenger/petshop
今すぐBabelを起動してください
Babelの使用を開始する前に、nodejsをインストールしており、すでに慣れていることを前提としています。 Js と一緒に。
また、yarn をインストールしており、yarn に精通していることも前提としています。 Yarn の最大の利点は、Yarn が必要なライブラリを一度ダウンロードするだけで、後で使用するときにローカルにキャッシュされたバージョンを直接使用するため、npm よりもはるかに高速であることです。 npm はこれらのライブラリを毎回ダウンロードします。なんという人生の無駄だろう。まだyarnをインストールしていない場合でも問題ありません。npmの使用手順も以下に記載されています。
次に、Babel のインストールと構成を開始します。 babel-cli をインストールします
yarn add babel-cli --dev // npm install --save-dev babel-cli
babel のプリセットをインストールします。
yarn add babel-preset-es2015 --dev // npm install --save-dev babel-preset-es2015
現時点では、ES2015 の機能を使用できます。ただし、これでは十分ではありません。たとえば、Promise
を使用せず、より便利な async/await
構文を使用したいと考えています。 es2015 プリセットだけでは不十分です。
Promise
我想用更加方便的async/await
语法。只有es2015这个preset是不够的。
Babel的plugin和preset
Babel本身不处理语言特性的转码。这些功能都是由plugin和preset实现的(preset也是一个plugin的集合)。如上文所述,要使用es2015的内容就需要安装babel-preset-es2015这个preset。要使用async/await那么就需要安装对应的preset或者插件。为了简单我们安装preset:babel-preset-stage-0。preset stage-0包含了async/await相关的插件: babel-plugin-syntax-async-functions、babel-plugin-transform-regenerator。
yarn add babel-preset-stage-0 --dev // npm install --save-dev babel-preset-stage-0
这样还是不能在项目中使用es7的async/await了。还需要更多的配置,有两种方法可以达到目的:
1.使用babel-polyfill
。有一个不好地地方,babel-polyfill
会污染global对象,所以不适合于library之类的使用。仅适合于web app使用。
2.使用babel运行时转码工具,transform-runtime
插件。使用这个方法正好弥补了上面的方法的不足之处。它是尤其适合于library一类的项目使用。
分别介绍这两种方法。
安装babel-polyfill
:
yarn add babel-polyfill --dev // npm install --save-dev babel-polyfill
之后,在你的项目的入口文件的最上方引入babel-polyfill
。比如我现在有一个Express的Web App,那么的入口文件就是开启这个app的index.js文件。在这个文件的最上方引入polyfill,require('babel-polyfill')
。或者你的入口文件已经是ES2015的写法了,那么就直接import,import 'babel-polyfill'
。
使用transform-runtime
也非常简单。安装:
yarn add babel-plugin-transform-runtime --dev // npm install --save-dev babel-plugin-transform-runtime
另外还需要安装babel-runtime:
yarn add babel-runtime // npm install --save babel-runtime
之后在.babelrc文件中添加如下的配置,两个二选其一即可:
// without options { "plugins": ["transform-runtime"] } // with options { "plugins": [ ["transform-runtime", { "helpers": false, // defaults to true "polyfill": false, // defaults to true "regenerator": true, // defaults to true "moduleName": "babel-runtime" // defaults to "babel-runtime" }] ] }
剩下的就是欢畅的使用async/await了。
另外如果要使用Object.assing
这样的方法的话,也可以使用插件:babel-plugin-transform-object-assign
,如果要使用解构赋值可以使用插件:babel-plugin-transform-object-rest-spread
import Express from 'express' let app = Express() app.get('/', (req, res) => { res.send('hello world') }) app.listen(8080, () => console.log('server is running at http://localhost:8080'))
1. babel-polyfill
を使用します。 babel-polyfill
はグローバル オブジェクトを汚染するため、ライブラリなどでの使用には適さないという欠点があります。 Web アプリの使用にのみ適しています。
transform-runtime
プラグインを使用します。この方法を使用すると、上記の方法の欠点が補われるだけです。特に図書館などのプロジェクトに適しています。 これら2つの方法をそれぞれ紹介します。
babel-polyfill
:
./node_modules/.bin/babel-node index.js --preset es2015, stage-0
をインストールした後、プロジェクトのエントリ ファイルの先頭に babel-polyfill
を導入します。たとえば、現在 Express Web アプリを持っており、エントリ ファイルはアプリを開くindex.js ファイルです。このファイルの先頭に、require('babel-polyfill')
というポリフィルを導入します。または、エントリ ファイルが既に ES2015 で記述されている場合は、直接インポートして import 'babel-polyfill'
を実行します。
transform-runtime
の使用も非常に簡単です。インストール:
{ "presets": ["es2015", "stage-0"] }
babel-runtime もインストールする必要があります:
babel -w code/ -d build/
async function errorAsyncFunc() { try{ throw new Error('Async function error') } catch(e) { throw e } } errorAsyncFunc()
Object.assing
などのメソッドを使用したい場合は、プラグイン babel-plugin-transform-object-assign
を使用することもできます。構造化割り当てを使用したい場合は、プラグイン: babel-plugin-transform-object-rest-spread
を使用できます。もちろん、これらはstage-0のプリセットに含まれています。 🎜🎜今すぐ ES2015 コードを書き始めましょう。 ExpressJs をプロジェクトにインストールし、index.js ファイルを作成します。演習として小さな Web アプリを作成してみましょう: 🎜🎜🎜"scripts": { "build": "babel src -d build --source-maps", "start": "node build/index.js" },
npm run build
npm rm --global gulp
yarn global add gulp-cli // npm install --global gulp-cli
上面看起来很不错了。但是还有一个问题,在你调试代码的时候,你调试的实际是babel命令转码之后的js,不是原来你编写的源代码所在的文件。调试的不是源文件,多少会有些不便。比如下面的文件会抛出一个异常:
async function errorAsyncFunc() { try{ throw new Error('Async function error') } catch(e) { throw e } } errorAsyncFunc()
在转码命令中加一个--source-maps
可以解决这个问题:
babel code/ -d build/ --source-maps
最后在package.json里添加scripts节点:
"scripts": { "build": "babel src -d build --source-maps", "start": "node build/index.js" },
接下来:
npm run build
Gulp出场
上文讲述了如何使用Babel实现ES201x的开发。但是在正式的开发中,上面的这些配置还略显不足,尤其是你的项目包括web端、server端,尤其web端不仅处理ES201x的代码还需要处理。所以需要Gulp出场。
这玩意儿看起来很复杂,你定义了编译的过程。其实掌握了以后很好用,尤其是可以自动处理很多东西,节约大把时间。要使用Gulp,必须先安装NodeJS。这个基本是标配。然后你会用到它的命令行工具。
安装Gulp
在最新发布的Gulp里有一点调整。gulp-cli从gulp分离出来作为单独的一部分使用。所以,如果你已经安装过gulp之前的版本需要先删除:
npm rm --global gulp
安装gulp-cli
yarn global add gulp-cli // npm install --global gulp-cli
在--dev模式下安装gulp
yarn add gulp --dev // npm install --save-dev gulp
创建gulp配置文件
就像Babel要用.babelrc作为配置文件一样,gulp也需要一个配置文件。这个配置文件就是gulpfile.js, 但是和babel同用的情况下把gulpfile.js重命名为gulp.babel.js:
mv "gulpfile.js" "gulpfile.babel.js"
gulp
的使用还是很简单的,主要就是在gulpfile.babel.js文件中添加各种task。在这些task中一定要添加一个叫做default的task,gulp命令的执行起点就是从这里开始。
假设有这么一个场景:
1.使用eslint检查代码,发现代码风格和潜在的错误。
2.自动实现ES201x -> ES5的代码转码,并把转码后的代码放在指定目录下。
3.在转码的时候添加sourcemaps。
以上这些“任务”都是用gulp自动实现。该如何配置呢?
gulp和eslint
要在gulp中使用各种请他的类似于eslint这样的功能的时候需要使用在gulp上的对应的插件。没错,gulp的设计思路和gulp基本一样:插件机制。
那么我们就需要首先下载eslint的插件:
yarn add --dev gulp-eslint // npm install --save-dev gulp-eslint
在开始编写我们的第一个task之前, 做最后的准备工作。首先需要配置.eslintrc文件。eslint会根据这个文件定义的规则检查代码的风格。我们不准备大批的配置规则,这样非常耗时间而且也照顾不到很多我们项目已经保留下来的编码风格。所以,airbnb的一套规则拿来使用时最好的办法。
安装eslint
yarn add --dev eslint // npm install --save-dev eslint
然后你可以运行命令来初始化配置:./node_modules/.bin/eslint --init
。你也可以忽略这个命令,直接创建一个.eslintrc的文件。
安装eslint的airbnb扩展
要使用airbnb的一套规则就需要安装他们的eslint扩展:
yarn add eslint-config-airbnb --dev // npm install --save-dev eslint-config-airbnb
命令执行之后会提示有些依赖项没有安装,分别是eslint-plugin-import@^2.2.0
、eslint-plugin-import@^2.2.0
、eslint-plugin-jsx-a11y@^3.0.2
。依次安装这些依赖项就好。
.eslintrc
{ "env": { "es6": true }, "rules": { "semi": "off", "import/no-extraneous-dependencies": ["error", { "devDependencies": true, "optionalDependencies": false, "peerDependencies": false }] ,"quotes": ["error", "single", {"allowTemplateLiterals": true}] }, "extends": "airbnb" }
env
指定环境是支持es6的,rules指定的是一些补充内容,比如字符串使用单引号还是双引号等。这个是根据个人喜好配置的,你可以选择添加你需要的规则。最后是extends,这里配置airbnb就用上了airbnb的一套eslint编码检查规则。
gulp-eslint插件用起来
import gulp from 'gulp' import eslint from 'gulp-eslint // 配置需要处理的文件目录和转码之后文件的存放目录 const paramConfig = { source: 'src/**/*.js', dest: 'build', }
引入相关模块之后开始写任务:
gulp.task('lint', () => { // eslint配置,使用配置的文件目录。排除node_modules下的全部文件。 return gulp.src([paramConfig.source, '!node_modules/**']) .pipe(eslint()) .pipe(eslint.result(result => { console.log(`ESLint result: ${result.filePath}`); console.log(`# Messages: ${result.messages.length}`); console.log(`# Warnings: ${result.warningCount}`); console.log(`# Errors: ${result.errorCount}`); })) .pipe(eslint.format()) .pipe(eslint.failOnError()) })
如前文所述,default任务是必须:
gulp.task('default', ['lint'], function () { // lint任务成功执行之后执行这个方法 });
跳转到项目的目录下,运行gulp命令。会得到如下的输出:
$ gulp [21:43:01] Requiring external module babel-register [21:43:01] Using gulpfile ~/Documents/test-polyfill/gulpfile.babel.js [21:43:01] Starting 'lint'... [21:43:02] Starting 'babel-sourcemaps'... ESLint result: ~/Documents/test-polyfill/src/index.js # Messages: 0 # Warnings: 0 # Errors: 0 ESLint result: ~/Documents/test-polyfill/src/test.js # Messages: 0 # Warnings: 0 # Errors: 0 [21:43:02] Finished 'lint' after 605 ms [21:43:02] Finished 'babel-sourcemaps' after 653 ms [21:43:02] Starting 'default'... gulp default task! [21:43:02] Finished 'default' after 98 μs
gulp和babel
这次同时处理babel和sourcemaps的问题。
首先安装插件:
yarn add --dev gulp-babel // npm install --save-dev gulp-babel
import gulp-babel
插件:
import babel from 'gulp-babel' import sourcemaps from 'gulp-sourcemaps'
添加任务:
gulp.task('babel-sourcemaps', () => { return gulp.src(paramConfig.source) .pipe(sourcemaps.init()) .pipe(babel()) .pipe(sourcemaps.write('.')) .pipe(gulp.dest(paramConfig.dest)) })
修改default任务:
javascript gulp.task('default', ['lint', 'babel-sourcemaps'], () => { console.log('gulp default task!') })
如果你不想用sourcemaps的话,可以这么写:
javascript gulp.task('babel', () => { return gulp.src(paramConfig.source) .pipe(babel()) .pipe(gulp.dest(paramConfig.dest)) })
把gulp放在npm命令体系下
babel
老早就配置好了,现在和配置好了gulp。gulp每次输入命令基本上就是手动执行。现在应该让这个命令半自动执行了。
修改package.json文件,在其中添加scripts
节点:
"scripts": { "build": "gulp", "start": "node build/index.js" },
如此一来,很多的命令都可以像gulp一样放在npm的scripts里执行。比如,现在可以在命令行李输入如下命令来实现lint和babel转码:
npm run build
开始执行:
npm start
总结
使用bebel可以提前使用最新的JavaScript语言特性,这样编写很多代码的时候会变得简洁高效。并且babel转码之后生成的代码也是非常规范的ES5写法,同时是在严格模式下的。所以,我们在写ES201x代码的时候不需要再添加'use strict'
;标识。
使用gulp又可以使很多不大不小但是很费时间的事自动处理。
把这两者结合在一起会让你的项目开发效率提升很多。所以,看到这里你不觉得你应该赶快在项目里使用这些技术,让开发进入快车道吗!!!???
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
以上がNodeJS プロジェクトで ES6 を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Node.js は、高いパフォーマンス、スケーラビリティ、クロスプラットフォーム サポート、豊富なエコシステム、開発の容易さなどの機能を備えているため、バックエンド フレームワークとして使用できます。

Node.js には次のグローバル変数が存在します。 グローバル オブジェクト: グローバル コア モジュール: プロセス、コンソール、require ランタイム環境変数: __dirname、__filename、__line、__column 定数: unknown、null、NaN、Infinity、-Infinity

MySQL データベースに接続するには、次の手順に従う必要があります。 mysql2 ドライバーをインストールします。 mysql2.createConnection() を使用して、ホスト アドレス、ポート、ユーザー名、パスワード、データベース名を含む接続オブジェクトを作成します。 connection.query() を使用してクエリを実行します。最後に connection.end() を使用して接続を終了します。

Node.js インストール ディレクトリには、npm と npm.cmd という 2 つの npm 関連ファイルがあります。違いは次のとおりです。拡張子が異なります。npm は実行可能ファイルで、npm.cmd はコマンド ウィンドウのショートカットです。 Windows ユーザー: npm.cmd はコマンド プロンプトから使用できますが、npm はコマンド ラインからのみ実行できます。互換性: npm.cmd は Windows システムに固有ですが、npm はクロスプラットフォームで使用できます。使用上の推奨事項: Windows ユーザーは npm.cmd を使用し、他のオペレーティング システムは npm を使用します。

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

はい、Node.js はバックエンド開発言語です。これは、サーバー側のビジネス ロジックの処理、データベース接続の管理、API の提供などのバックエンド開発に使用されます。

はい、Node.js はフロントエンド開発に使用でき、主な利点には、高性能、豊富なエコシステム、クロスプラットフォーム互換性が含まれます。考慮すべき点は、学習曲線、ツールのサポート、コミュニティの規模の小ささです。

Node.js と Java の主な違いは、設計と機能です。 イベント駆動型とスレッド駆動型: Node.js はイベント駆動型で、Java はスレッド駆動型です。シングルスレッドとマルチスレッド: Node.js はシングルスレッドのイベント ループを使用し、Java はマルチスレッド アーキテクチャを使用します。ランタイム環境: Node.js は V8 JavaScript エンジン上で実行され、Java は JVM 上で実行されます。構文: Node.js は JavaScript 構文を使用し、Java は Java 構文を使用します。目的: Node.js は I/O 集中型のタスクに適しており、Java は大規模なエンタープライズ アプリケーションに適しています。
