
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 , . , , « ». , , .
