Как включить node_modules с помощью веб-пакета? - PullRequest
0 голосов
/ 25 октября 2018

В моем приложении angularJs 1.3 ранее я использовал bower and grunt, и он работал нормально.Я добавлял файлы в мой index.html, как на следующем скриншоте.Но теперь я установил все пакеты, используя NPM и используя WEbPack 4.21.0 для объединения и запуска приложения.Но теперь, если я удалю ссылку на пакеты из файла Index.html, мое приложение перестанет работать.Но я не хочу, чтобы все эти ссылки были в Index.html, а просто хочу создать пакетный файл из этих файлов.Пожалуйста, направьте меня, как я могу этого достичь?В настоящее время он просто добавляет файл angular.js и несколько других файлов в vendor.js.

Index.html

rerwer

Package.json

ssss

webpack.config.js

enter image description here

Обновленный вопрос:

Сейчас я использую следующий файл webpack.config.js, но он создает bootstrap_and_some_plugin.css.js .Он должен создать файл CSS, но не знаете, почему он создает файл JS?

module.exports = {
  context: __dirname + '/app/scripts',
  resolve: {
    modules: ['bower_components', 'node_modules'],
    alias: {
      bower_components: __dirname + '/app/bower_components',
      assets: __dirname + '/app/assets'
    },
    extensions: ['.js', '.jsx', '.css']
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          { loader: "style-loader" },
          { loader: "css-loader" }
        ]
      },
      {
        test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
        use: [{
          loader: 'file-loader',
          options: {
            name: '[name].[ext]',
            outputPath: 'fonts/'
          }
        }]
      }
    ]
  },
  entry: {
    app: './main-app.js',
    'bootstrap_and_some_plugin.css': [
      'bower_components/font-awesome/css/font-awesome.css',
      'bower_components/seiyria-bootstrap-slider/dist/css/bootstrap-slider.min.css',
      'bower_components/angular-ui-tree/dist/angular-ui-tree.min.css',
    ]
  },
  output: {
    filename: '[name].js',
    path: __dirname + '/app/scripts',
    //chunkFilename: '[id].[chunkhash].js',
  },
  devServer: {
    contentBase: './app',
    host: 'localhost',
    port: '9000',
    inline: true,
    compress: true,
    proxy: {
      '/api/**': {
        //target: 'http://10.189.1.159:8080',
        target: 'http://localhost:9100',
        secure: false,
        changeOrigin: true,
        cookieDomainRewrite: true
      }
    },
    open: true
  },
  plugins: [

  ]
};

1 Ответ

0 голосов
/ 25 октября 2018

В файле webpack.config.js вы добавляете это свойство в свойство resolve:

resolve: {
    alias: {
        bower_components: __dirname + '/app/bower_components'
    }
}

В файле main-app.js, если вы хотите использовать какой-либо файл js, вы вызываете так:

require('bower_components/jquery/dist/jquery.js');
require('bower_components/angular/angular.js');
require('bower_components/bootstrap/dist/js/bootstrap.js');
// ...

Необходимо указать путь к файлу webpack.config.js.В моем примере весь путь выглядит следующим образом:

your_project
    webpack.config.js
    app
        bower_components
            jquery
                ...
            angular
                ...
            bootstrap
                ...

__dirname относится к текущему пути файла js, который его использует.Если вы используете __dirname внутри webpack.config.js файла, он будет отображать your_project.Или используя его внутри jquery.js, он отобразит your_project\app\bowser_components\jquery\dist.

Затем создайте файл bundle.js и удалите все пути в файле Index.cshtml.

Надеюсь, это поможет!

ОБНОВЛЕНИЕ: Если ваш целевой файл js становится слишком большим.Вы можете разбить модули на несколько частей, например:

entry: {
    'bootstrap_and_some_plugin.css': [
        './app/bower_components/bootstrap/dist/css/bootstrap.min.css',
        './app/bower_components/some-plugin/css/some-plugin.css'
    ],
    'jquery_and_angular.js': [
        './app/bower_components/jquery/dist/jquery.js', 
        './app/bower_components/angular/angular.js'
    ],
    'site.js': ['./js/site']
}

Затем в вашем Index.cshtml:

<link href="bootstrap_and_some_plugin.css" rel="stylesheet" />

<!-- body content -->

<script src="jquery_and_angular.js"></script>
<script src="site.js"></script>

ОБНОВЛЕНИЕ 2: Вам необходимо установить2 пакета babili-webpack-plugin и extract-text-webpack-plugin

В файле webpack.config.js:

// define these variables before "module.exports"
var BabiliPlugin = require('babili-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {...};

Затем установите параметры плагина:

plugins: [
    new BabiliPlugin({}, { test: /\.js$/, comments: false }),
    new ExtractTextPlugin('[name]'),
    ... and other options
]

и параметры вывода:

output: {
    filename: '[name]',
    ... and other options
}
...