我正在尝试从nodejs中运行webpack。我的目录结构如下所示:
build
|- dev.js
dist
|- bundle.js
src
|- layout
|- App.js
|- server
|- app.js
dev.js:
const webpack = require('webpack');
const path = require('path');
// returns a Compiler instance
const compiler = webpack(
{
context: path.resolve(__dirname, '../src'),
entry: [
'./server/app.js'
],
output: {
path: path.join(__dirname, '../dist'),
filename: 'bundle.js'
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader?presets[]=es2015&presets[]=react'
}
]
}
}
);
compiler.run(function(err, stats) {
if(err) {
console.log('Err');
}
});
app.js:
import express from 'express';
import React from 'react';
import { renderToString } from 'react-dom/server';
import App from '../layout/App';
const app = express();
app.get('*', (req, res) => {
res.send(renderToString(<App />));
});
app.listen(3000, () => {
});
如果我现在运行node build/dev.js
它会生成我的bundle.js,但它找不到我的入口模块。
(function webpackMissingModule() { throw new Error("Cannot find module \"./server/app.js\""); }());
即使我认为应该如何定义入口点,我已经尝试了很多组合,甚至是绝对路径。但总是一样的结果,它找不到入门模块。我在这里缺少什么?
答案 0 :(得分:2)
node_modules
中找到它的资产,最好是你可以将package.json和其他文件一起发布。webpack
命令,这通常会提供大量的调试输出(以及有关构建步骤,错误等的信息) - 我建议使用要调试它,然后在知道一切正常时切换到编程方法。如果没有package.json
,那么确实很难调整到底出了什么问题。
假设你的package.json是正确的,这里有一个dev.js
文件可以使用上面的代码:
const webpack = require('webpack');
const path = require('path');
const fs = require('fs');
var nodeModules = {};
fs.readdirSync('node_modules')
.filter(function(x) {
return ['.bin'].indexOf(x) === -1;
})
.forEach(function(mod) {
nodeModules[mod] = 'commonjs ' + mod;
});
// returns a Compiler instance
const compiler = webpack(
{
context: path.resolve(__dirname, "../src"),
target: 'node',
entry: [
'./server/app.js'
],
output: {
path: path.join(__dirname, '../dist'),
filename: 'bundle.js'
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader?presets[]=es2015&presets[]=react'
}
]
},
externals: nodeModules
}
);
compiler.run(function(err, stats) {
console.log(err, stats);
});