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.
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'
}
Je veux souligner la différence de la configuration côté client:
target: 'node'
externals: [nodeExternals()]
pour node.js, il n’a pas beaucoup de sens de regrouper node_modules/
output.libraryTarget: 'commonjs2'
sans cela, vous ne pouvez pas require('your-library')
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]
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"
},