LoginSignup
0
0

More than 5 years have passed since last update.

24日目。Javascriptのモジュール、パッケージ、配列、npm

Last updated at Posted at 2019-03-18

24日目 Javascriptのモジュール編。
クラスのインポートエクスポート、パッケージの使い方など。
なるほどわかりやすいのでした!

ところが、完成したJavascriptを実行しようとすると・・・
クラスのimport/exportがエラーになってしまいました。
どうしたらいいか、さっとは分からなかったので、今日のところはこの辺で。。。
そのうち分かってくるでしょう。あーくやしい!

24日目
http://appdays.herokuapp.com/Day24/

モジュール

ファイルの分割

JSファイルを分割する。

クラスのexport,import

クラスの定義の後で「export default クラス名」として、他のファイルへ渡せるようにする。
使用するファイルの先頭で「import クラス名 from "./ファイル名"」と書いて、他のファイルのクラスを読み込む。
拡張子jsは省略、ファイル名は""でくくる。

値のexport,import

文字列や数値や関数など、どんな値でもエクスポートが可能です。
「export default 定数名」
「import 定数名 from "./ファイル名"」

データ定義を分割する

わかりやすい。

デフォルトエクスポート

export defaultは自動的に「export default 値」の値がインポートされます。
そのためエクスポート時の値の名前と、インポート時の値の名前は違っても問題ありません。
デフォルトエクスポートは1ファイル1つの値のみ使える。
複数の値をエクスポートする場合は「名前付きエクスポート」

名前付きエクスポート

defaultを書かずに、名前を{}で囲んでエクスポートする書き方です。
インポートする値は、「import { 値の名前 } from "./ファイル名"」
「export { 名前1, 名前2 }」1つのファイルから複数のエクスポートが出来ます。

相対パス

使える。

パッケージ

パッケージも使える。
import 定数名 from パッケージ名;

完成!

さくさく進めました!

これをhtmlに読ませて実行してみると「SyntaxError: Unexpected token」となりました。
そうそう、script.jsしか読み込んでいなかった。
index.htmlに追記しましょう。

<html>
  <head>
    <meta charset="utf-8">
    <title>Javascriptの練習</title>
    <script type="text/javascript" src="animal.js"></script>
    <script type="text/javascript" src="dog.js"></script>
    <script type="text/javascript" src="script.js"></script>
    <script type="text/javascript" src="./data/dogData.js"></script>
  </head>
  <body>
    <h1>このページは</h1>
    console.log(xxxx); を使って開発ツールのコンソールに実行結果を出力しています。
  </body>
</html>

本当にこれでいいのかな。もっとスマートな方法がありそうなものですが・・・

実行
js5err.png

クラスのimportできず!
あれこれやってみましたが、動かず。
一旦ギブアップします。どうしたらいいんだろう。

(所要時間 1時間)


配列を操作するメソッド

push

配列の最後に新しい要素を追加するメソッド

forEach

配列の中の要素を1つずつ取り出して、全ての要素に繰り返し同じ処理を行うメソッド
characters.forEach((character)=>{ console.log(character)});

おお、スッキリ!

find

配列の中から条件に合う最初の1つを返す。
配列の要素がオブジェクトで、プロパティを条件にすると、findはオブジェクトごと返す。

const evenNumbers = numbers.find((number)=>{
  return number % 2 === 0;
});

filter

配列の中から条件に合う要素全部を返す。

const evenNumbers = numbers.filter((number)=>{
  return number % 2 === 0;
});

map

配列内のすべての要素に処理を行い、その戻り値から新しい配列を作成する。

const doubledNumbers = numbers.map((number)=>{
  return number*2;
});

完成!

(所要時間 30分)

npmパッケージを開発環境で使えるようにする

インストール

$ npm install

> fsevents@1.2.7 install /Users/robamimim/Documents/JavaScript/npm_sample/node_modules/fsevents
> node install

node-pre-gyp WARN Using needle for node-pre-gyp https download 
[fsevents] Success: "/Users/robamimim/Documents/JavaScript/npm_sample/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node" is installed via remote
npm notice created a lockfile as package-lock.json. You should commit this file.
added 329 packages from 155 contributors and audited 3493 packages in 14.638s
found 0 vulnerabilities

使ってみる。

$ npm run start

> npm_sample@1.0.0 start /Users/robamimim/Documents/JavaScript/npm_sample
> babel src --out-dir dist && node dist/index.js

Successfully compiled 1 file with Babel.
これはテストメッセージです
t$ npm install --save readline-sync
+ readline-sync@1.4.9
added 1 package from 1 contributor and audited 3501 packages in 4.304s
found 0 vulnerabilities

できた!

ノートラブルであっさりできました!
(所要時間 30分)

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0