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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

Q&A

0回答

846閲覧

webpackにでjsファイルのエントリーポイントを2つにした際に、片方のvueのdataが読み込まれない

matsuo_basho

総合スコア88

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

0グッド

0クリップ

投稿2021/05/12 08:12

いつもお世話になっております。

表題について質問です。
現在webpackを利用してコーディングを進めているのですが、
サイトのトップページにしか利用しないjsライブラリ(swiper.js)があるため、
トップページ専用のjsファイルを別途作成しようとエントリーポイントを2つに分けるよう設定しました。

具体的には、

main.js

main.bundle.js

にコンパイルされていたものを、

main.jsswiper.js

main.bundle.jsvendor.budle.jsswiper.js

のように分割されるように変更しました。

ところが、実際にコンパイルしてみると、
swiper.js‌のdata(){}内の値が上手くhtml側に渡っておらず以下のエラーが表示されています。

[Vue warn]: Property or method "msg2" is not defined on the instance but referenced during render.

msg2はチェックのためのダミー値になります。
siwper.jsmounted()にあるconsole.log()は問題なく実行されます。

以上となりますが、
こちらの原因が分かるかたらいらっしゃったらご教授いただけますと幸いです。
お忙しいところ大変恐縮ですが、宜しくお願い致します。

ソースコード

json

1 2# package.json 3 4{ 5 "name": "frontend", 6 "version": "1.0.0", 7 "main": "index.js", 8 "license": "MIT", 9 "scripts": { 10 "dev": "gulp Pug:Serve & webpack serve --config webpack.dev.js", 11 "build": "gulp Pug:Build & webpack --config webpack.prod.js", 12 "Lint:js": "eslint './src/**/*.{ts,js}' --fix", 13 "Prettier": "prettier --write './src/**/*.{ts,js}'", 14 "Flow": "flow" 15 }, 16 "devDependencies": { 17 "@babel/cli": "^7.13.16", 18 "@babel/core": "^7.14.0", 19 "@babel/preset-env": "^7.14.1", 20 "@babel/preset-flow": "^7.13.13", 21 "autoprefixer": "^10.2.5", 22 "babel-eslint": "^10.1.0", 23 "babel-loader": "^8.2.2", 24 "css-loader": "^5.2.4", 25 "css-minimizer-webpack-plugin": "^2.0.0", 26 "csscomb-loader": "^0.0.2", 27 "eslint": "^7.26.0", 28 "eslint-config-airbnb": "^18.2.1", 29 "eslint-import-resolver-webpack": "^0.13.0", 30 "eslint-loader": "^4.0.2", 31 "eslint-plugin-flowtype": "^5.7.2", 32 "eslint-plugin-import": "^2.22.1", 33 "eslint-plugin-jsx-a11y": "^6.4.1", 34 "eslint-plugin-react": "^7.23.2", 35 "eslint-plugin-react-hooks": "^4", 36 "flow-bin": "^0.150.1", 37 "gulp": "^4.0.2", 38 "gulp-notify": "^4.0.0", 39 "gulp-plumber": "^1.2.1", 40 "gulp-pug": "^4.0.1", 41 "gulp-sass": "^4.1.0", 42 "html-webpack-plugin": "^5.3.1", 43 "mini-css-extract-plugin": "^1.6.0", 44 "node-sass-package-importer": "^5.3.2", 45 "postcss-loader": "^5.2.0", 46 "postcss-sort-media-queries": "^3.9.10", 47 "prettier": "^2.2.1", 48 "pug": "^3.0.2", 49 "pug-plain-loader": "^1.1.0", 50 "sass": "^1.32.12", 51 "sass-loader": "^11.0.1", 52 "style-loader": "^2.0.0", 53 "terser-webpack-plugin": "^5.1.1", 54 "ts-loader": "^9.1.2", 55 "typescript": "^4.2.4", 56 "webpack": "^5.36.2", 57 "webpack-cli": "^4.7.0", 58 "webpack-dev-server": "^3.11.2", 59 "webpack-merge": "^5.7.3", 60 "webpack-remove-empty-scripts": "^0.7.1" 61 }, 62 "dependencies": { 63 "destyle.css": "^2.0.2", 64 "react": "^17.0.2", 65 "react-dom": "^17.0.2", 66 "swiper": "5.x", 67 "vue": "^2.6.12", 68 "vue-awesome-swiper": "^4.1.1" 69 } 70} 71

javascript

1 2// webpack.common.js 3 4const MiniCssExtractPlugin = require('mini-css-extract-plugin'); 5const RemoveEmptyScriptsPlugin = require('webpack-remove-empty-scripts'); 6 7/* ----- パス設定 ----- */ 8const path = require('path'); 9 10const dir = { 11 src: path.join(__dirname, 'src'), 12 dist: path.join(__dirname, 'dist'), 13}; 14 15/* ----- js rules ----- */ 16const jsRules = { 17 18 // *----- js | lint -----* 19 jsLint: { 20 test: /.(ts|js|vue)$/, 21 exclude: /node_modules/, 22 23 // ビルド前に構文チェック 24 enforce: 'pre', 25 loader: 'eslint-loader', 26 options: { 27 28 // 構文エラーがあった場合はfixする 29 fix: true, 30 31 }, 32 }, 33 34 // *----- js | compile -----* 35 jsCompile: { 36 test: /.(ts|js|vue)$/, 37 exclude: /node_modules/, 38 loader: 'babel-loader', 39 }, 40 41 // *----- typescript | compile -----* 42 tsCompile: { 43 test: /.ts$/, 44 exclude: /node_modules/, 45 use: 'ts-loader', 46 }, 47 48}; 49 50/* ----- css rules ----- */ 51const cssRules = { 52 53 // *----- css, scss, sass | compile -----* 54 test: /.(scss|sass|css)$/, 55 exclude: /node_modules/(?!(dom7|ssr-window|swiper)/).*/, 56 use: [ 57 58 MiniCssExtractPlugin.loader, 59 { 60 // css を js にバンドル 61 loader: 'css-loader', 62 options: { 63 64 // オプションでCSS内のurl()メソッドの取り込みを禁止する 65 url: false, 66 67 // 0 => no loaders (default); 68 // 1 => postcss-loader; 69 // 2 => postcss-loader, sass-loader 70 importLoaders: 2, 71 72 }, 73 }, 74 75 'csscomb-loader', 76 'postcss-loader', 77 'sass-loader', 78 79 ], 80 81}; 82 83/* ----- 設定 ----- */ 84module.exports = { 85 86 entry: { 87 88 main: path.resolve(dir.src, 'js/main.js'), 89 swiper: path.resolve(dir.src, 'js/swiper.js'), 90 style: path.resolve(dir.src, 'scss/index.scss'), 91 92 }, 93 94 output: { 95 96 // 生成先のディレクトリ 97 path: dir.dist, 98 99 // 生成されるファイル名( 出力されるのをbundle ) 100 filename: '[name].bundle.js', 101 102 }, 103 104 resolve: { 105 106 // import文のパス指定に node_modules を省略できるようにする 107 modules: ['node_modules'], 108 109 // 拡張子を省略できるようにする 110 extensions: ['.ts', '.js', '.vue'], 111 112 }, 113 114 module: { 115 rules: [ 116 jsRules.jsLint, 117 jsRules.jsCompile, 118 jsRules.tsCompile, 119 cssRules, 120 ], 121 }, 122 123 plugins: [ 124 125 new MiniCssExtractPlugin({ 126 filename: '[name].bundle.css', 127 }), 128 129 new RemoveEmptyScriptsPlugin(), 130 131 ], 132 133}; 134

javascript

1 2// main.js 3 4import Vue from 'vue/dist/vue'; 5 6new Vue({ 7 8 data() { 9 return { 10 11 msg: 'main.js!', 12 13 }; 14 }, 15 16}).$mount('#app');

javascript

1 2// swiper.js 3 4import Vue from 'vue/dist/vue'; 5 6new Vue({ 7 8 data() { 9 return { 10 11 msg2: 'swiper.js!', 12 13 }; 14 }, 15 16 mounted() { 17 console.log('aaa'); 18 }, 19 20}).$mount('#app'); 21

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問