質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • JavaScript

    15275questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • webpack

    209questions

  • Hyperapp

    2questions

hyperappを使ったJSをwebpack4でビルドしたら表示されない

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 244

kumakuma112

score 12

hyperappのサンプルソースをwebpack4でビルドしたくて、webpackの設定をかいたのですが、書き方が間違ってるのか、ビルドはできるものの、htmlに何も表示されません。

ビルドされたjsは、正常に読み込まれていて、コンソールログを書けば内容が正しく出力されます。
ただhyperappの記述でかいたviewがbodyに出力されません。

 webpack.config.js

const webpack = require('webpack');
const path = require('path');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');

module.exports = (env, argv) => {
    // argv.modeにはwebpackを実行したmodeが格納されている
    // 例えば webpack --mode development と実行すれば
    // argv.mode には 'development' が格納されている
    // そのためdevelopmentモードで実行したかどうかを判定できる
    const IS_DEVELOPMENT = argv.mode === 'development';

    return {
        // エントリーポイントの設定
        entry: './src/app.js',
        // 出力の設定
        output: {
            // 出力するファイル名
            filename: 'app.js',
            // 出力先のパス(v2系以降は絶対パスを指定する必要がある)
            path: path.join(__dirname, 'www/js')
        },
        // developmentモードで有効になるdevtool: 'eval'を上書き
        // developmentモードでビルドした時だけソースマップを出力する
        devtool: IS_DEVELOPMENT ? 'source-map' : 'none',
        // productionモードで有効になるoptimization.minimizerを上書きする
        optimization: {
          // developmentモードでビルドした場合
          // minimizer: [] となるため、consoleは残されたファイルが出力される
          // puroductionモードでビルドした場合
          // minimizer: [ new UglifyJSPlugin({... となるため、consoleは削除したファイルが出力される
          minimizer: IS_DEVELOPMENT
            ? []
            : [
                new UglifyJSPlugin({
                  uglifyOptions: {
                    compress: {
                      drop_console: true
                    }
                  }
                })
              ]
        },
        module: {
            rules: [
                {
                    test: /\.js$/,
                    exclude: /node_modules/,
                    loader: 'babel-loader',
                    options: {
                        presets: [['env', { modules: false }]],
                        plugins: [['transform-react-jsx', { "pragma": "h" }]]
                    }
                }
            ]
        }
    }
};

 package.json

{
  "name": "hyperapp-count",
  "version": "1.0.0",
  "description": "Minimal web app",
  "main": "index.js",
  "scripts": {
    "watch": "webpack --mode development --watch",
    "build": "webpack --mode production",
    "server": "browser-sync start --server ./www --files ./www/**/*",
    "dev": "npm-run-all -p watch server"
  },
  "author": "",
  "license": "MIT",
  "private": true,
  "dependencies": {
    "hyperapp": "^1.2.5"
  },
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-plugin-transform-react-jsx": "^6.22.0",
    "babel-preset-env": "^1.7.0",
    "browser-sync": "^2.18.13",
    "npm-run-all": "^4.1.2",
    "webpack": "^4.7.0",
    "webpack-cli": "^3.0.3"
  }
}

 app.js

import { app, h } from 'hyperapp';

// 状態管理オブジェクト
const state = {
    greeting: "こんにちは世界"
};

// 状態を更新する関数群
const actions = {
};

// 実際に表示するタグ
const view = (state, actions) => (
    <header>
        <h1 id="title">{ state.greeting }</h1>
    </header>
);

app(state, actions, view, document.body);

 html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Hyperapp Countサンプル</title>
    <link rel="stylesheet" href="./css/bundle.css">
</head>
<body>
    <script src="./js/app.js"></script>
</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

記載されているソースコードを元に、同じ環境を手元で作ったところ、正常に表示されました。
そのため、おそらく

  • 最新のpackageを入れ直すことで動く
  • このソースに書かれていない箇所に違いがある(フォルダの構成、ビルド時のコマンド、サーバーの起動方法など)

のうちいずれかと思われます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JavaScript

    15275questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • webpack

    209questions

  • Hyperapp

    2questions