webpack объединяет файлы, но index.js не запускается

#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'
});