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

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

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

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

JavaScript

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

Q&A

解決済

3回答

2129閲覧

webpackを利用した時にnode_moduleのvue.jsをrequireで読み込めなくて困っています。→ 訂正 importで読み込めなくて困っています。

mee12

総合スコア101

Vue.js

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

JavaScript

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

0グッド

1クリップ

投稿2022/03/17 04:10

編集2022/03/18 07:03

webpackを利用した時にnode_moduleをrequireで読み込めなくて困っています。
→ 訂正 webpackを利用した時にnode_moduleをimportで読み込めなくて困っています。

まずnpmでパッケージをインストールし、 (npm install)
webpackでビルド (npm run build)

までは成功したのですが、その後実際に使用するためにvue.jsをrequireで読み込もうとしたのですが、Uncaught ReferenceError: require is not defined が発生してしまいました。
コンソールでwindowにvueが含まれていなかったので読み込めないのかもしれませんが。

↓ 変更

webpack-config.js、そのほかの設定を見直しし、
importで読み込めるように調整をしていますがうまくいきませんでした。

どなたかわかる方いらっしゃいましたらお願いします。

本文のソースコードの追記は長くなってしまうため、ソースコードをそのまま変更しました。

txt

1// フォルダ構成を修正  2- Project 3 - wwwroot 4 - dist 5 - main.js 6 - js 7 - Test1 8 - index.js 9 - src 10 - index.js 11 - index.html (エントリポイント用のhtml) 12 - node_modules 13 14 - Views 15 - Test1 16 - Index.html

package.json

1// package.jsonを修正 2{ 3 "name": "webapp", 4 "version": "1.0.0", 5 "description": "webapp use webpack", 6 "repository": "webapp", 7 "main": "index.js", 8 "scripts": { 9 "build": "webpack", 10 }, 11 "author": "", 12 "license": "ISC", 13 "devDependencies": { 14 "@babel/core": "^7.17.7", 15 "@babel/preset-env": "^7.16.11", 16 "babel-loader": "^8.2.3", 17 "css-loader": "^6.7.1", 18 "html-webpack-plugin": "^5.5.0", 19 "mini-css-extract-plugin": "^2.5.3", 20 "vue-loader": "^17.0.0", 21 "vue-style-loader": "^4.1.3", 22 "webpack": "^5.70.0", 23 "webpack-cli": "^4.9.2", 24 "webpack-dev-server": "^4.7.4" 25 }, 26 "dependencies": { 27 "@popperjs/core": "^2.11.4", 28 "bootstrap": "^5.1.3", 29 "core-js": "^3.21.1", 30 "vue": "^3.2.31" 31 } 32} 33

webpack

1// webpack-config.jsを修正 2const path = require("path"); 3 4const webpack = require("webpack"); 5const HtmlWebpackPlugin = require("html-webpack-plugin"); 6const { VueLoaderPlugin } = require("vue-loader"); 7const MiniCssExtractPlugin = require("mini-css-extract-plugin"); 8 9module.exports = { 10 entry: { 11 main: "./src/index.js", 12 TestManagement_SampleLists: "./js/views/transaction.testmanagement/TestManagement_SampleLists/index.js" 13 }, 14 output: { 15 filename: "[name].js", 16 path: __dirname + "/dist" 17 }, 18 devtool: "source-map", 19 mode: "development", 20 module: { 21 rules: [ 22 { 23 test: /\.js$/, 24 include: path.resolve(__dirname, "/src"), 25 loader: "babel-loader", 26 options: { presets: ["@babel/preset-env"] } 27 }, 28 { 29 test: /\.vue$/, 30 loader: "vue-loader" 31 }, 32 { 33 test: /\.css$/, 34 use: [MiniCssExtractPlugin.loader, "css-loader"], 35 } 36 ], 37 }, 38 39 resolve: { 40 // Webpackで利用するときの設定 41 alias: { 42 "bootstrap$": "./bootstrap/dist/js/bootstrap.js", 43 "vue$": "./vue/dist/vue.esm-bundler.js" 44 }, 45 extensions: ["*", ".js", ".vue"], 46 }, 47 48 plugins: [ 49 new HtmlWebpackPlugin({ 50 template: "./src/index.html", 51 }), 52 new MiniCssExtractPlugin({ 53 filename: "./css/site.css", 54 chunkFilename: "[name].css" 55 }), 56 new VueLoaderPlugin(), 57 new webpack.DefinePlugin({ 58 __VUE_OPTIONS_API__: false, 59 __VUE_PROD_DEVTOOLS__: false, 60 }) 61 ] 62};

index.js

1// app.js -> index.jsに変更、修正 2import "@popperjs/core"; 3import "bootstrap"; 4import "vue"; 5 6import "../js/Test1/index.js

html

1// htmlを修正 2<script src="./dist/main.js"></script> 3 4<div id="app"> 5 6</div> 7 8<!-- 画面ごとのjavascript --> 9<!-- webpackから実行できるようになった --> 10<!-- <script type="module" src="./js/Test1/index.js" defer></script> -->

javascript

1// javascriptを修正 2import { createApp } from "vue"; // 入らない 3 4const app = createApp({ 5 6}); 7 8app.mount("#app");

現在の画面のコンソール
webpack-dev-serverを起動し、javascriptでブレークをすることはできたが、createAppが空だった。
イメージ説明

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

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

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

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

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

maisumakun

2022/03/17 04:29

> vue.jsをrequireで読み込もうとしたのですが 当該のファイルは、どのように使おうとしたのですか?
mee12

2022/03/17 06:14 編集

コメントありがとうございます。 <script type="module" src="./dist/app.bundle.js"></script>を const createApp = require("vue"); const app = createApp({ }); app.mount("#app"); のようにで使用しようとしてました。 答えになっていなければすみません。
guest

回答3

0

ブラウザで直接requireを処理することはできません(<script type="module">importなら通しますが、それでもnpm経由のモジュールを取得することは実質的にできません)。

当該のファイルをWebpack処理に通して、その結果をブラウザから読み込む必要があります。

投稿2022/03/17 06:47

maisumakun

総合スコア145184

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

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

mee12

2022/03/17 07:13

ご回答ありがとうございます。 requireと<script type="module">のimportについてわかりました。 Webpack処理を通して、その結果をブラウザに読み込むにはどうすればよいでしょうか?
maisumakun

2022/03/17 07:18

app.jsから当該JavaScriptファイルをimportしましょう。
mee12

2022/03/17 07:32 編集

現在は app.js内にimportを書いて app.jsをwebpackでビルドして、app.bundle.jsになったところでつまずいてました。
maisumakun

2022/03/17 09:14

> app.bundle.jsになったところでつまずいてました。 同じエラーが出続けている状況ですか?
mee12

2022/03/17 11:06 編集

いまは requireをやめて、webpack-config.jsの修正をしました。 ・webpack-config.jsをデフォルトに修正 module.exports = { entry: { main: "./src/index.js" }, output: { filename: "[name].js", path: __dirname + "/dist" }, ・webpack.config.jsのalias "vue$': 'vue/dist/vue.esm-bundler.js"を追加 ・npm run build ・実際にはhtmlから画面固有のjavascriptを script type="module" srcで呼び出していて、その中で、 import { createApp } from "vue"; const app = createApp({ }); app.mount("#app"); をしています。 その結果importする時にエラーしているみたいで、パスがおかしいと言われています。 Uncaught TypeError: Failed to resolve module specifier "vue". Relative references must start with either "/", "./", or "../". aliasを下記とすると、npm run buildが通らないのでダメでした。 "vue$": "../node_modules/vue/dist/vue.esm-bundler.js"
maisumakun

2022/03/17 11:18

> 実際にはhtmlから画面固有のjavascriptを script type="module" srcで呼び出していて 呼び出すファイルもWebpackで事前処理の必要があります(一緒にapp.jsから呼び出す、もしくはwebpack.configで処理対象に追加する)。そのままtype="module"で呼んでもnpmパッケージが処理できません。
mee12

2022/03/18 04:36 編集

なるほどです。画面ごとにscriptを変える場合はwebpackにどのような設定をすれば良いでしょうか? いまやりたいこととしては、SPAじゃなくマルチページアプリでjavascript使いたいということです。 サーバー側がMVCアプリなのでvueプロジェクトを構築するわけにもいかず。 ネットで以下のような記事を見つけました。 MPA(マルチページアプリ)でwebpackを使う https://www.key-p.com/blog/staff/archives/107125 記事によると、srcフォルダにindex.htmlとindex.jsを置いているようです。 jsフォルダとViewsフォルダに分けるような使い方ができるのか調査中です。 まずはwebpack-config.jsに画面ごとのエントリーポイントを設定してみましたがうまくいきませんでした。 importができていない状況です。 バンドルのためのjsファイルのimportのパスか、aliasのパスの間違いがあるかもしれません エントリポイントの複数設定については必要のようです。 - 実現したいこと - - wwwroot  - dist  - main.js  - js   - Test1    - index.js ※1View固有のjsファイル  - src   - index.html   - index.js    ※バンドルのためのjsファイル  - node_modules  - package.json  - webpack-config.js - Views  - Test1   - Index.html ※Controllerで開くhtmlファイル ---------------------------------------------------------
mee12

2022/03/18 07:00 編集

bundleしたファイルを実行でき、画面固有のjavascriptも実行できましたが、importでcreateAppが入りませんでした。 本文のソースを修正しました。
guest

0

自己解決

解決できないため一旦終了します

投稿2022/06/08 12:43

mee12

総合スコア101

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

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

0

node.jsはやってなくて受け売りですが、
webpack.config.js に

resolve: { alias: { 'vue$': 'vue/dist/vue.esm.js' }, }

を足すとか。

webpack + Vue(webpack.config.js書き方の例) - Qiita
Webpack 5を使ったvue.jsの環境構築とSFCの利用方法 | アールエフェクト

投稿2022/03/17 04:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mee12

2022/03/17 06:16 編集

ご回答ありとうございます。 私の環境はVue.js3でしたので、 "vue$": "vue/dist/vue.esm-bundler.js"のようにして、ビルドして再実行しましたが、うまくいきませんでした。 コンソールのwindowに何ももないようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問