#javascript #jquery #webpack #bundle
#javascript #jquery #webpack #пакет
Вопрос:
У меня есть index.js файл, который импортирует мой CSS и несколько пакетов, но после объединения всего и запуска сервера я заметил, что index.js не был запущен. Я сделал простой console.log
в index.js и это не достигнуто.
Я скопировал содержимое своего webpack.config
файла из предыдущего проекта, который работал правильно, поэтому я не уверен, ошибка ли это файловой структуры / пути или что-то еще. Есть мысли?
Структура каталогов:
webpack.config.js:
const path = require('path')
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin')
var $ = require("jquery");
var HtmlWebpackPluginConfig = new HtmlWebpackPlugin({
template: './src/index.html',
filename: 'RecruitmentTracking.txt',
inject: 'body'
});
module.exports = {
entry: "./src/index.js", // removing the . fails the build
output: {
filename: './SiteAssets/scripts/RecruitmentTracking.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [{
loader: 'babel-loader',
test: /.js$/,
exclude: /node_modules/
}, {
test: /.css$/,
use: ['style-loader', 'css-loader']
}, {
test: /.(png|svg|jpg|gif)$/,
use: [
'file-loader'
]
}
],
},
devServer: {
disableHostCheck: true
},
devtool: 'cheap-module-eval-source-map', // this helps the browser point to the exact file in the console, helps in debug
devServer: {
contentBase: path.join(__dirname, 'src'),
historyApiFallback: true // this prevents the default browser full page refresh on form submission and link change
},
plugins: [
HtmlWebpackPluginConfig,
new webpack.ProvidePlugin({
"$": "jquery",
"jQuery": "jquery",
"window.jQuery": "jquery"
})]
}
index.js:
import "./RecruitmentTracking.css";
import 'jquery';
import 'bootstrap/dist/js/bootstrap.bundle.min.js';
import 'jquery-ui-bundle/jquery-ui.min.js';
console.log('this is index.js');
package.json:
{
"name": "recruitmenttracking",
"version": "1.0.0",
"description": "Recruitment Initiatives Tracking",
"main": "index.js", // ----- should a more specific file path be here?
"scripts": {
"test": "echo "Error: no test specified" amp;amp; exit 1",
"start": "webpack-dev-server --open --mode development",
"build": "webpack --config webpack.config.js",
"dev-server": "webpack-dev-server"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/cli": "^7.2.3",
"@babel/core": "^7.4.0",
"@babel/preset-env": "^7.4.2",
"babel-loader": "^8.0.5",
"css-loader": "^2.1.1",
"file-loader": "^3.0.1",
"html-webpack-plugin": "^3.2.0",
"style-loader": "^0.23.1",
"webpack": "^4.29.6",
"webpack-cli": "^3.3.0",
"webpack-dev-server": "^3.2.1"
},
"dependencies": {
"@babel/polyfill": "^7.4.0",
"axios": "^0.18.0",
"bootstrap": "^4.3.1",
"jquery": "^3.3.1",
"jquery-ui-bundle": "^1.12.1-migrate",
"pdfmake": "^0.1.54",
"popper": "^1.0.1"
}
}
Комментарии:
1. Вы встраиваете html в ‘RecruitmentTracking.txt ‘, вы должны изменить его на index.html
2. @nucleartux У меня есть index.html файл в /dist и .txt-файл находятся там, потому что он загружен в CMS.
3. @freedomn-m Вы имеете в виду относительные пути внутри webpack.config.js ?
Ответ №1:
Что здесь происходит, так это:
1 — webpack компилирует и выводит в: './SiteAssets/scripts/RecruitmentTracking.js'
2 — HtmlWebpackPlugin, затем прочитает файл шаблона './src/index.html'
и внедрит RecruitmentTracking.js
скрипт внутрь тела.
3 — затем он выводит результат в dist/RecruitmentTracking.txt
Я не вижу никакой проблемы, кроме того, что файл имеет формат .txt, а не .html. и, очевидно, не будет интерпретироваться браузером.
Вместо этого попробуйте вывод в HTML-файл, он должен работать
Ответ №2:
1) По какой-то причине вы настроили следующий плагин для вывода .txt
файла. Поэтому не ожидайте, что браузер интерпретирует это как HTML-файл
var HtmlWebpackPluginConfig = new HtmlWebpackPlugin({
template: './src/index.html',
filename: 'RecruitmentTracking.txt',
inject: 'body'
});
2) Также я полагаю, что файл, который вы открываете в браузере, является /dist/index.html
и этот файл не загружает ваш js-файл. Попробуйте добавить следующую строку в /dist/index.html
:
<script src"./SiteAssets/scripts/RecruitmentTracking.js"></script>
3) Если вышеуказанное работает, пожалуйста, все же рассмотрите возможность более пристального рассмотрения (1)
Ответ №3:
Вы назвали выходной файл в HtmlWebpackPluginConfig как RecruitmentTracking.txt
. измените его на index.html
, и он должен работать
var HtmlWebpackPluginConfig = new HtmlWebpackPlugin({
template: './src/index.html', // webpack takes ./src/index.html as input file
filename: 'index.html', // webpack processes the above input template and should output to index.html
inject: 'body'
});