Java Script」カテゴリーアーカイブ

Webpackで静的なファイルをコピーする方法

CopyWebpackPluginを使って、build時に、JSONファイルなどをバンドルせずに、単体でコピーする方法。

インストール方法

$ npm i -S copy-webpack-plugin write-file-webpack-plugin

file-webpack-pluginを入れることで、debug時に、実際のdistディレクトリにも書き出されるようになります。

webpack.config.js

importを追加

const CopyFilePlugin = require("copy-webpack-plugin");
const WriteFilePlugin = require("write-file-webpack-plugin");

pluginの項目に追加

new CopyFilePlugin(
    [
        {
            context: "src",
            from: "**/*.json",
            to: path.resolve(__dirname, "dist")
        }
    ],
    { copyUnmodified: true }
),
new WriteFilePlugin()

src以下のJSONファイルをdist以下にコピーするという設定。contextで、対象となるディレクトリ/ファイルの親ディレクトリを指定。

参考にしたサイト

https://qiita.com/pepoipod/items/e41105e8f3afd47dc01c
https://codeday.me/jp/qa/20190515/828253.html

TypeScriptでlog4jsを使う方法

インストール

$ npm i -S log4js @types/log4js

使い方

コンソールとファイルに、ログを同時出力。

import { configure, getLogger } from "log4js";

configure({
  appenders: {
    console: {
      type: "console"
    },
    logfile: { type: "file", filename: "log/app.log" }
  },
  categories: { default: { appenders: ["console", "logfile"], level: "error" } }
});

const logger = getLogger();

logger.level = "debug";
logger.debug("Some debug messages");
logger.error("aha!");

出力結果

[2019-10-20T10:58:43.835] [DEBUG] default - Some debug messages
[2019-10-20T10:58:43.839] [ERROR] default - aha!

設定を変えると、ログレベルごとに出力先を変えたり、ログの出力のテンプレート(レイアウト)を変更できたりする。

log4jsのドキュメント
https://log4js-node.github.io/log4js-node/

日付の形式について
https://www.npmjs.com/package/date-format

TypeScript + node.js + VisualStudioCodeの開発環境

node.jsでアプリケーションをつくるのに、TypeScriptで書いて、Visual Studio Codeを開発環境とする方法を探る

参考になったサイト

https://qiita.com/notakaos/items/3bbd2293e2ff286d9f49
https://qiita.com/kurogelee/items/cf7954f6c23294600ef2
https://github.com/TypeStrong/ts-node/issues/46#issuecomment-437758378

ここのボイラープレートをテンプレートにすると便利です。必要なnpmパッケージ、設定ファイルがはいっています。git cloneなどでローカルに。
https://github.com/notakaos/typescript-node-base

package.json

{
  "name": "typescript-node-base",
  "keywords": [],

  "version": "0.1.0",
  "main": "dist/index.js",
  "scripts": {
    "dev": "ts-node ./src/index.ts",
    "dev:watch": "ts-node-dev --respawn src/index.ts",
    "clean": "rimraf dist/*",
    "tsc": "tsc",
    "build": "npm-run-all clean tsc",
    "start": "node ."
  },
  "keywords": [],
  "author": "YOUR NAME",
  "license": "ISC",
  "description": "",
  "dependencies": {},
  "devDependencies": {
    "@types/node": "^12.7.4",
    "npm-run-all": "^4.1.5",
    "rimraf": "^2.7.1",
    "ts-node": "^8.3.0",
    "ts-node-dev": "^1.0.0-pre.42",
    "typescript": "^3.6.2"
  }
}

L9: --respawnを指定することで、サーバ型ではないスクリプトでも、実行後終了せずに待機させ、更新→再読み込み→再起動が可能に。

tsconfig.json

{
  "compilerOptions": {
    "target": "ES2019",
    "module": "commonjs",
    "sourceMap": true,
    "outDir": "./dist",
    "strict": true,
    "noImplicitAny": true,
    "esModuleInterop": true
  },
  "include": ["src/**/*"]
}

sourceMapは有効にしましょう。Debugが効くようになります。

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "ts-node[debug]",
      "type": "node",
      "request": "launch",
      "args": ["${workspaceFolder}/src/index.ts"],
      "runtimeArgs": ["--nolazy", "-r", "ts-node/register"],
      "sourceMaps": true,
      "cwd": "${workspaceRoot}",
      "restart": true,
      "protocol": "inspector"
    }
  ]
}

L8: 任意のファイルを指定

https://github.com/TypeStrong/ts-node/issues/46#issuecomment-437758378
の投稿が参考になりました。

nvm-windowsでnode.jsをインストールする

コマンドプロンプトか、PowerShellから

インストール可能なバージョンを表示する

 > nvm list available

実行結果

|   CURRENT    |     LTS      |  OLD STABLE  | OLD UNSTABLE |
|--------------|--------------|--------------|--------------|
|   12.10.0    |   10.16.3    |   0.12.18    |   0.11.16    |
|    12.9.1    |   10.16.2    |   0.12.17    |   0.11.15    |
|    12.9.0    |   10.16.1    |   0.12.16    |   0.11.14    |
|    12.8.1    |   10.16.0    |   0.12.15    |   0.11.13    |
|    12.8.0    |   10.15.3    |   0.12.14    |   0.11.12    |
|    12.7.0    |   10.15.2    |   0.12.13    |   0.11.11    |
|    12.6.0    |   10.15.1    |   0.12.12    |   0.11.10    |
|    12.5.0    |   10.15.0    |   0.12.11    |    0.11.9    |
|    12.4.0    |   10.14.2    |   0.12.10    |    0.11.8    |
|    12.3.1    |   10.14.1    |    0.12.9    |    0.11.7    |
|    12.3.0    |   10.14.0    |    0.12.8    |    0.11.6    |
|    12.2.0    |   10.13.0    |    0.12.7    |    0.11.5    |
|    12.1.0    |    8.16.1    |    0.12.6    |    0.11.4    |
|    12.0.0    |    8.16.0    |    0.12.5    |    0.11.3    |
|   11.15.0    |    8.15.1    |    0.12.4    |    0.11.2    |
|   11.14.0    |    8.15.0    |    0.12.3    |    0.11.1    |
|   11.13.0    |    8.14.1    |    0.12.2    |    0.11.0    |
|   11.12.0    |    8.14.0    |    0.12.1    |    0.9.12    |
|   11.11.0    |    8.13.0    |    0.12.0    |    0.9.11    |
|   11.10.1    |    8.12.0    |   0.10.48    |    0.9.10    |

This is a partial list. For a complete list, visit https://nodejs.org/download/release

任意のバージョンをインストール

> nvm install 10.16.3

インストールされているバージョンを表示

> nvm ls

使用するバージョンを設定

 > nvm use 10.16.3

log4jsのConfigurationの書き方がv2で変更になった

Node.js環境でログ出力をするlog4jsのConfigurationがv1からv2以降で大きく変わった。

v2.0x以降の記述方法

{
    appenders: {
        default: {
            type: 'file',
            "filename": "log/server.log",
            "maxLogSize":104857600,
            "layout": {
                "type": "pattern",
                "pattern": "%d [%p] %m"}
        }

    },
    categories: { default: { appenders: ['default'], level: 'debug' } }
}

古い記述方法だと、must have property “appenders” of type objectというエラーが発生する。
詳細は、Migrating from log4js versions older than 2.x

node.jsで色解析

node.jsで色解析できるnpmパッケージ

palette
https://www.npmjs.com/package/palette

color-thief
https://www.npmjs.com/package/color-thief

いずれも、canvasを利用して、色取得をさせる。color-thiefの方が画像ファイル→canvasへの変換もラップしてくれている。また、color-thifは、ドメナントカラーも返してくる。

node.jsでunderscore.jsを使う

Java Scriptで配列、オブジェクトを扱いを便利にするunderscore.js。node.jsでも使える。

npmでインストール

$ npm install --save underscore

スクリプトで宣言、

var __ = require('underscore');

ここで気を付けなければならないのが、予約語の関係で、変数(インスタンス)名はブラウザで使う時のように、”_”とはせず、”__”(_を2個)にすること。

Via! node.jsでunderscore.jsを使う | okame-log

node.jsでsprintf

数値の頭に0を付けたりするのに便利なsprintf。node.jsでも使える。

npmでこちらをインストール
sprintf

$ node install --save sprintf-js

スクリプトの冒頭で宣言して、

sprintf = require('sprintf').sprintf;

こんな感じで使う。

var str = sprintf('%04d', foo);