web-dev-qa-db-fra.com

en utilisant webpack côté serveur de nodejs

J'ai essayé d'utiliser Webpack avec une application nodejs, et le côté client fonctionne bien - une documentation raisonnablement bonne sur leur site Web + des liens issus de la recherche Google.

Quelqu'un at-il utilisé Webpack sur le serveur de nodejs? ou s'il vous plaît me guider vers des liens utiles. 

Merci.

36
user237865

Cela pourrait être utile: http://jlongster.com/Backend-Apps-with-Webpack--Part-I

Le point clé est de rendre externes tous les modules tiers (dans le répertoire node_modules) dans le fichier de configuration webpack

Fichier de configuration final

var webpack = require('webpack');
var path = require('path');
var fs = require('fs');

var nodeModules = {};
fs.readdirSync('node_modules')
  .filter(function(x) {
    return ['.bin'].indexOf(x) === -1;
  })
  .forEach(function(mod) {
    nodeModules[mod] = 'commonjs ' + mod;
  });

module.exports = {
  entry: './src/main.js',
  target: 'node',
  output: {
    path: path.join(__dirname, 'build'),
    filename: 'backend.js'
  },
  externals: nodeModules,
  plugins: [
    new webpack.IgnorePlugin(/\.(css|less)$/),
    new webpack.BannerPlugin('require("source-map-support").install();',
                             { raw: true, entryOnly: false })
  ],
  devtool: 'sourcemap'
}
25
Olim Saidov

Un exemple réel avec webpack 2.x

Je veux souligner la différence de la configuration côté client:

1. target: 'node'

2. externals: [nodeExternals()]

pour node.js, il n’a pas beaucoup de sens de regrouper node_modules/

3. output.libraryTarget: 'commonjs2'

sans cela, vous ne pouvez pas require('your-library')

webpack.config.js

import nodeExternals from 'webpack-node-externals'

const config = {
  target: 'node',
  externals: [nodeExternals()],
  entry: {
    'src/index': './src/index.js',
    'test/index': './test/index.js'
  },
  output: {
    path: __dirname,
    filename: '[name].bundle.js',
    libraryTarget: 'commonjs2'
  },
  module: {
    rules: [{
      test: /\.js$/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: [
            ['env', {
              'targets': {
                'node': 'current'
              }
            }]
          ]
        }
      }
    }]
  }
}

export default [config]
20
Tyler Long

Voici la configuration de WebPage que j'avais l'habitude d'utiliser dans mon application Nodejs quand je voulais qu'elle lise JSX, ce que vous savez, Node ne peut pas faire.

const path = require('path');

module.exports = {
  // inform webpack that I am building a bundle for nodejs rather than for the
  // browser
  target: 'node',

  // tell webpack the root file of my server application
  entry: './src/index.js',

  // tells webpack where to put the output file generated
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'build')
  },

  // tells webpack to run babel on every file it runs through
  module: {
    rules: [
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        options: {
          presets: [
            'react',
            'stage-0',
            ['env', { targets: { browsers: ['last 2 versions'] } }]
          ]
        }
      }
    ]
  }
};

Après avoir implémenté cela, n'oubliez pas de vous rendre dans votre fichier package.json et d'inclure ce script:

{
  "name": "react-ssr",
  "version": "1.0.0",
  "description": "Server side rendering project",
  "main": "index.js",
  "scripts": {
    "dev:build:server": "webpack --config webpack.server.js"
  },
0
Daniel