Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

JQueryプラグインを使う

Jquery plugin

プラグインの例 jquery.hoge.js

(function ($) {
    $.fn.hoge = function () {
        return $("p").click(function () {
            console.log("test!");
            $(this).text("hello!");
        });
    };
})(jQuery);

これをjqueryとともにhtml側で読み込んでおく。

タイプスクリプトから読み込むには インターフェースを定義して、JQueryのメソッドに追加するファイルを用意しておく。

jquery.hoge.t.ds

interface Hoge {
    hoge:() => JQuery<HTMLElement>;
}

interface JQuery extends Hoge {

}

これで使える。

$("p").hoge();

使用例

html

<link rel="stylesheet" type="text/css" href="./jQuery.NumPad-master/jquery.numpad.css">
<script type="text/javascript" src="./jquery.min.js"></script>
<script type="text/javascript" src="./jQuery.NumPad-master/jquery.numpad.js"></script>
<script type="text/javascript" src="./usejq.js"> </script>

型定義 jQuert.Numpad.d.ts

interface NumPadPlugin {
    numpad:(option:{
        textDone?:string,
        onChange?:(event:Event, value:string) => void
    }) => JQuery<HTMLElement>;
}

interface JQuery extends NumPadPlugin {

}

呼び出し

$(".inputCell").numpad(
    {
        textDone:"Done?",
        onChange:(event, value) => {
            console.log(event);
            console.log(value);
        }
    }
)

jquery等を使う。

Webアプリ環境

  1. npm パッケージマネージャ
  2. TypeScript 型付きのjavascrpt
  3. WebPack TypeScriptやHTMLのパーツ化のために使用
  4. Babel (今回使わなかった。) JSのバージョン吸収

npm

プロジェクトでパッケージ管理をスタートしたい場合

npm init

ではじめられる。 -yをつけておけば初期設定はすべてyesで飛ばせる。 これでpackage.jsonが作成される。

インストールしたいものを

npm install hoge

でインストールする。 インストールしたものはpackage.jsonに記録される。

  1. 本番環境と開発環境でインストールをわけれる。(開発環境の場合は--save-dev をつける等)
  2. globalにインストールしたい場合 -gをつける。

package.jsonの例

{
    "name": "jsapp",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "build": "webpack",
        "watch": "webpack -w"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "dependencies": {
        "@types/dom-inputevent": "^1.0.1",
        "html-loader": "^0.5.5",
        "ts-loader": "^4.3.0",
        "typescript": "^2.8.3",
        "webpack": "^4.8.3",
        "webpack-cli": "^2.1.3"
    }
}

scriptsのbuildにwebpackを設定しているので

npm run build

でwebpackを実行するとdistフォルダにコンパイルしたものが吐き出される。

  1. "@types/dom-inputevent" typesciptでdomのinputeventの型定義情報
  2. "html-loader" htmlをjsで読み込むのに使用
  3. "ts-loader" typescriptをjavascriptコンパイルするのに使用
  4. "typescript" typescriptを使用する
  5. webpack, webpack-cli ts-loader, html-loader等を使うために使用

WebPack

https://webpack.js.org/

設定はwebpack.config.js

インストール

npm install webpack webpack-cli --save-dev

実行

distフォルダ(設定で変更可能)に webpack.config.jsで設定しておいた処理を通してできたものが吐き出される。

実行はnpmのスクリプトに設定しておく

"scripts": {
  "build": "webpack"
  "watch": "webpack -w"
}

設定

webpack.config.js

module.exports = {
  // or production
  mode: 'development',

  entry: {
    main:'./src/main.ts',
    menu:'./src/menu.ts'},

  module: {
    rules: [
      {
        test: /\.ts$/,
        use: 'ts-loader'
      },
      {
        test: /\.html$/,
        loader: 'html-loader'
      }
    ]
  },
  // for import
  resolve: {
    extensions: [
      '.ts'
    ]
  }
};
  1. entry ビルドを開始するエントリーポイントのjs
  2. output 出力
  3. module test:に指定された拡張子のものは use:に指定されたローダーで変換をかけること。

参考

https://ics.media/entry/12140

html-loader

htmlをjsに読み込むために使用 設定はwebpack.config.jsの例を参照

使用例

let html = require('./hoge.html');

これでhtmlが文字列で取得できる。

TypeScript

https://ics.media/entry/16329

インストール

npmで適宜インストール typescriptの他にwebpackで使用するために ts-loaderもインストールがいる。

設定ファイル 

ルートにtsconfig.jsonをおく。

{
  "compilerOptions": {
    "sourceMap": true,
    "target": "es5",
    "module": "es2015" // 出力モジュール名
  }
}

型名

必要に応じてtypescriptの型の定義情報をnpmでインストールする。

@types 型定義ファイル

例 @types/dom-inputevent

npm install --save @types/dom-inputevent

Jquery

typescript用に型情報@types/jquery をinstall。

html側でjqueryはimportしておくこと。

使用例

$("#listBox").mouseover(function() {
    $(this).fadeOut("slow");
});

Jquery plugin

プラグインの例 jquery.hoge.js

(function ($) {
    $.fn.hoge = function () {
        return $("p").click(function () {
            console.log("test!");
            $(this).text("hello!");
        });
    };
})(jQuery);

これをjqueryとともにhtml側で読み込んでおく。

タイプスクリプトから読み込むには インターフェースを定義して、JQueryのメソッドに追加するファイルを用意しておく。

jquery.hoge.t.ds

interface Hoge {
    hoge:() => JQuery<HTMLElement>;
}

interface JQuery extends Hoge {

}

これで使える。

$("p").hoge();

サンプル

Vue.jsのサンプルを打ち込んでみた。
簡単につかえるようだ。

<div>
    <div id="app-2">
        <span v-bind:title="message">
            Hover your mouse over me for a few seconds to see my dynamically bound title!
        </span>
    </div>
    <div id="app-3">
        <span v-if="seen">Now you see me</span>
    </div>

    <div id="app-4">
        <ol>
            <li v-for="todo in todos">
                {{ todo.text }}
            </li>
        </ol>
    </div>


    <div id="app-5">
        <p>{{ message2 }}</p>
        <button v-on:click="reverseMessage">Reverse Message</button>
    </div>

    <div id="app-6">
        <p>{{ message }}</p>
        <input v-model="message">
    </div>

    <div id="app-7">
        <ol>
            <!--
                Now we provide each todo-item with the todo object
                it's representing, so that its content can be dynamic.
                We also need to provide each component with a "key",
                which will be explained later.
              -->
            <todo-item v-for="item in groceryList" v-bind:todo="item" v-bind:key="item.id">
            </todo-item>
        </ol>
    </div>
</div>

<script src="./vue.js"></script>
<script>

    var app2 = new Vue({
        el: '#app-2',
        data: {
            message: 'You loaded this page on ' + new Date().toLocaleString()
        }
    })

    var app3 = new Vue({
        el: '#app-3',
        data: {
            seen: true
        }
    })

    var app4 = new Vue({
        el: '#app-4',
        data: {
            todos: [
                { text: 'Learn JavaScript' },
                { text: 'Learn Vue' },
                { text: 'Build something awesome' }
            ]
        }
    })


    var app5 = new Vue({
        el: '#app-5',
        data: {
            message2: 'Hello Vue.js!'
        },
        methods: {
            reverseMessage: function () {
                this.message2 = this.message2.split('').reverse().join('')
            }
        }
    })

    var app6 = new Vue({
        el: '#app-6',
        data: {
            message: 'Hello Vue!'
        }
    })

    Vue.component('todo-item', {
        props: ['todo'],
        template: '<li>{{ todo.text }}</li>'
    })

    var app7 = new Vue({
        el: '#app-7',
        data: {
            groceryList: [
                { id: 0, text: 'Vegetables' },
                { id: 1, text: 'Cheese' },
                { id: 2, text: 'Whatever else humans are supposed to eat' }
            ]
        }
    })
</script>

html埋め込み

webpackのhtml-loaderを使ってhtmlをjavascriptで読み込んだ使う。

html-loaderのインストール。 npm install html-loader

webpack.config.jsを設定

module.exports = {
    entry: './app.js',
    output: {
        path: __dirname + "/dist",
        filename: "bundle.js";
    },
    module: {
        loaders: [
            { test: /\.html$/, loader: 'html-loader' },//← これ
        ]
    },
};

jsでhtmlを読み込んで挿入する。

declare function require(x: string): any;
let html = require('./keyboard.html');
let div = document.getElementById("keyboard") as HTMLDivElement;
div.innerHTML = html;

参照フォルダ

参照フォルダとして追加したいものをプロジェクトにドラッグして参照フォルダして登録、
Bundleをみるとフォルダごとアプルに入ることがわかる。よってパスはBundle.main.bundlePathを起点に相対パスを追加していけば良い。

感想

1. InputEventは型定義を読み込んだ。
npm install @types/dom-inputevent
2. 定義されてないものはinputEvent["inputType"]で取れた。
3. 定義していないプロパティも input["oldValue"] = input.value;で代入できた。
4. childNodesはArray.prototype.forEach.callを使う必要があった。
5. webpack.config.jsは複数entryは entry: {
main:'./src/main.ts',
menu:'./src/menu.ts'},みたいに指定すればできた。
6. ビルドする必要があるのは若干面倒かも。

typescript環境

TypeScript

https://ics.media/entry/16329

インストール

typescript また、webpackで使用するために ts-loader もインストール

設定ファイル 

ルートにtsconfig.json

{
  "compilerOptions": {
    "sourceMap": true,
    "target": "es5",
    "module": "es2015" // 出力モジュール名
  }
}

webpackへの設定

webpack.config.jsを以下のように設定する

module.exports = {
  // or production
  mode: 'development',

  entry: './src/main.ts',

  module: {
    rules: [
      {
        test: /\.ts$/,
        use: 'ts-loader'
      }
    ]
  },
  // for import
  resolve: {
    extensions: [
      '.ts'
    ]
  }
};

ビルド

npm run build

webpackの使い方

WebPack

https://webpack.js.org/

読み込んで使う。エントリーポイント

//spc/index.js
import bar from './bar';
bar();

読み込まれる側

//src/bar.js
export default function bar() {
  //
}

これを設定するにはwebpack.config.jsを作る。

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
      path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  }
};

htmlで読み込む

<-- page.html -->
<!doctype html>
<html>
  <head>
    ...
  </head>
  <body>
    ...
    <script src="dist/main.js"></script>
  </body>
</html>

変換する。

npx webpack

インストール

npm install webpack webpack-cli --save-dev

実行

npx webpack

distフォルダが作成され main.jsが作られる。これをhtmlで読み込む。

実行はnpmのスクリプトに設定しておく

"scripts": {
  "build": "webpack"
  "watch": "webpack -w"
}

設定

webpack.config.js

module.exports = {
  entry: `./src/index.js`,
  output: {
    path: `${__dirname}/dist`,
    filename: 'main.js'
  },
  module: {
    rules: {
      { test: /\.txt$/, use: 'hoge-loader' }
    }
  }
};
  1. entry ビルドを開始するエントリーポイントのjs
  2. output 出力
  3. module test:に指定された拡張子のものは use:に指定されたローダーで変換をかけること。

https://ics.media/entry/12140

基本

npm

 パッケージ管理スタート

npm init これでpackage.jsonが作成される。

ローカルインストールは /node_modules 内にインストールされる。 -gをつけるとグローバルインストール。

アンインストールは uninstall

パッケージのアップデートは update

パッケージのリストは list

npm scripts

"scripts": {
  "キー":      "シェル",
  "キー2": "シェル"
}

キーの予約語

意味合い

  1. start
  2. restart
  3. stop
  4. test

これらは npm start等で実行できる。

フック

  1. publish npm publishの後
  2. install npm installの後
  3. uninstall npm uninstallの後
  4. update npm updateの後

 予約されていないキーの実行

npm run-sctipt キー npm run キー

キーにプレフィックスつける

  1. pre
  2. post
    フックのプレフィックス
  3. prepublish
  4. preinstall
  5. postuninstall
  6. preupdate

実行

  1. npm-run-all
  2. run-p A B 並列実行
  3. run-s A B 直列実行

コンフィグ設定

configフィールドに設定

 "config": {
   "port": "8080"
 }

次のようにも設定できる

npm config set myapp:port 80

npm_package_config_portのように取り出せる。

DependenciesとdevDependencies

本番環境か開発環境か インストール時に-Dもしくは --save-devとするとPackageJSONにはdevDependenciesとして記録される。

uninstall時にpackega.jsonの本番環境から削除するなら--saveもしくは-S、開発環境から削除するなら--save-devもしくは -D

packege.jsonで一括インストール npm install

本番環境のみインストール npm install --production