
JavaScriptを最初から研究していない場合、その最新バージョンを習得することは困難です。 エコシステムは急速に成長し、変化しているため、さまざまなツールが発明されたソリューションの問題に対処することは困難です。 1998年にプログラミングを開始しましたが、2014年にJavaScriptを理解するようになりました。 Browserifyをブラウジングして、そのキャッチフレーズを見たのを覚えています。
Browserifyでは、すべての依存関係を組み合わせて、ブラウザーでrequire(「モジュール」)を実行できます。
私はこの提案から一言も理解せず、これが開発者としてどのように役立つかを理解し始めました。
この記事の目的は、JavaScriptのツールが2017年まで開発されたコンテキストについて話すことです。 最初から始めましょう。恐竜と同じように、ツールを使用せずに、純粋なHTMLとJavaScriptでサイトを作成します。 徐々に、さまざまなツールを紹介し、それらが解決する問題を交互に検討します。 その歴史的背景のおかげで、JavaScriptの絶え間なく変化する状況に適応して理解することができます。
オールドスクールJavaScript
HTMLとJavaScriptのみを使用して「古い学校」のサイトを作りましょう。 この場合、ファイルを手動でダウンロードしてリンクする必要があります。 JavaScriptファイルにリンクする簡単なindex.htmlを次に示します。
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JavaScript Example</title>
  <script src="index.js"></script>
</head>
<body>
  <h1>Hello from HTML!</h1>
</body>
</html>
<script src="index.js"></script> JavaScript- index.js, :
// index.js
console.log("Hello from JavaScript!");
! , moment.js ( ). , , JS moment:
moment().startOf('day').fromNow();        // 20  
moment.js ! moment.js :

, «» . , moment.js , moment.min.js index.html.
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example</title>
  <link rel="stylesheet" href="index.css">
  <script src="moment.min.js"></script>
  <script src="index.js"></script>
</head>
<body>
  <h1>Hello from HTML!</h1>
</body>
</html>
, moment.min.js index.js, index.js moment:
// index.js
console.log("Hello from JavaScript!");
console.log(moment().startOf('day').fromNow());
JS-. , .
JavaScript (npm)
2010- , . Bower 2013-, 2015- npm. , 2016- yarn npm, npm-.
npm node.js, JavaScript, , . , .
: , . , . , JavaScript ( ).
, npm moment.js . node.js, npm, index.html :
$ npm init
( Enter, ), package.json. , npm . package.json :
{
  "name": "your-project-name",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
JS- moment.js npm, :
$ npm install moment --save
:
- moment.js node_modules.
 - package.json moment.js .
 
{
  "name": "modern-javascript-example",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "moment": "^2.19.1"
  }
}
, : node_modules ( ) package.json, npm install.
moment.js , npm . node_modules, node_modules/moment/min moment.min.js. , index.html npm moment.min.js:
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JavaScript Example</title>
  <script src="node_modules/moment/min/moment.min.js"></script>
  <script src="index.js"></script>
</head>
<body>
  <h1>Hello from HTML!</h1>
</body>
</html>
, npm . node_modules, HTML. , , .

(bundler) JavaScript- (webpack)
. JS , , ( ). JS- .
moment.js example —  moment.min.js HTML, moment, , moment.min.js ( , ).
2009- CommonJS, JavaScript. CommonJS , JS , . CommonJS node.js.

, node.js — JavaScript, . node.js-: moment.min.js HTML JS- :
// index.js
var moment = require('moment');
console.log("Hello from JavaScript!");
console.log(moment().startOf('day').fromNow());
, node.js — . npm-, require('./node_modules/moment/min/moment.min.js) require('moment').
, , , , require . , : , ( ) ( ).
(bundler). , . , . require ( , , JS-) . JS- require!
Browserify, 2011 . node.js- require ( npm ). 2015- webpack ( - React, ).
, webpack require('moment'). . webpack — npm-, :
$ npm install webpack --save-dev
--save-dev —  , production-. package.json, :
{
  "name": "modern-javascript-example",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "moment": "^2.19.1"
  },
  "devDependencies": {
    "webpack": "^3.7.1"
  }
}
webpack node_modules. :
$ ./node_modules/.bin/webpack index.js bundle.js
webpack index.js, require , bundle.js. , index.js, require. bundle.js, index.html:
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JavaScript Example</title>
  <script src="bundle.js"></script>
</head>
<body>
  <h1>Hello from HTML!</h1>
</body>
</html>
, , .
, webpack- index.js. , webpack ( ), . Webpack webpack.config.js :
// webpack.config.js
module.exports = {
  entry: './index.js',
  output: {
    filename: 'bundle.js'
  }
};
index.js webpack :
$ ./node_modules/.bin/webpack
index.js bundle.js, webpack webpack.config.js. , . .
. . JS- JavaScript require, <script> HTML. JS- . , .

(babel)
— , . -: , , .
, CSS Sass, Less Stylus. JavaScript - CoffeeScript ( 2010), babel TypeScript. CoffeeScript JavaScript  —  , (whitespace) . . Babel — , , JavaScript , , (ES2015 ), JavaScript (ES5). Typescript — , JavaScript , . babel, JavaScript.
babel webpack-. ( npm-) :
$ npm install babel-core babel-preset-env babel-loader --save-dev
, :
babel-core — babel;babel-preset-env — , , JavaScript ;babel-loader — , babel webpack.
webpack babel-loader, webpack.config.js:
// webpack.config.js
module.exports = {
  entry: './index.js',
  output: {
    filename: 'bundle.js'
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['env']
          }
        }
      }
    ]
  }
};
( , ). , webpack .js- ( node_modules) babel- babel-loader babel-preset-env. webpack .
, JavaScript ES2015! (template string) ES2015 index.js:
// index.js
var moment = require('moment');
console.log("Hello from JavaScript!");
console.log(moment().startOf('day').fromNow());
var name = "Bob", time = "today";
console.log(`Hello ${name}, how are you ${time}?`);
ES2015 require, :
// index.js
import moment from 'moment';
console.log("Hello from JavaScript!");
console.log(moment().startOf('day').fromNow());
var name = "Bob", time = "today";
console.log(`Hello ${name}, how are you ${time}?`);
import require, import . index.js, webpack:
$ ./node_modules/.bin/webpack
index.html . , ES2015, , babel. IE9 bundle.js :
// bundle.js
// ...
console.log('Hello ' + name + ', how are you ' + time + '?');
// ...
babel ES2015 JavaScript- , . , , — . JavaScript , async/await. , , .
, . , . webpack JavaScript, . .
(task runner) (npm-)
, — . - , , . .
2013- Grunt, Gulp. , , . , npm, .
npm- webpack. package.json:
{
  "name": "modern-javascript-example",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --progress -p",
    "watch": "webpack --progress --watch"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "moment": "^2.19.1"
  },
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-preset-env": "^1.6.1",
    "webpack": "^3.7.1"
  }
}
— build watch. :
$ npm run build
webpack ( webpack.config.js) --progress, , -p . watch:
$ npm run watch
--watch webpack JavaScript-, .
, package.json webpack ./node_modules/.bin/webpack, node.js npm-. ! , webpack-dev-server, - . :
$ npm install webpack-dev-server --save-dev 
npm- package.json:
{
  "name": "modern-javascript-example",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --progress -p",
    "watch": "webpack --progress --watch",
    "server": "webpack-dev-server --open"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "moment": "^2.19.1"
  },
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-preset-env": "^1.6.1",
    "webpack": "^3.7.1"
  }
}
:
$ npm run server
index.html localhost:8080 ( ). JavaScript- index.js webpack-dev-server JavaScript . , , , .
webpack webpack-dev-server, ( ). npm- Sass CSS, , — , . :
JavaScript. HTML JS :
, , . - , . , - .
, . , node- . npm , node- require import npm- . , - !
, -. Ember ember-cli, angular-cli Angular, create-react-app React, vue-cli Vue . . , . , . webpack, babel . . , .
JavaScript , . , , « ». , , .
