【发布时间】:2018-04-11 17:11:59
【问题描述】:
我为 webpack 生成了一个小代码。源码入口文件是这样的:
import archiver from 'archiver'
import request from 'request'
import mkdirp from 'mkdirp'
import Zip from 'node-zip'
import Zlib from 'zlib'
import path from 'path'
import fs from 'fs'
export default class myTestClass {
constructor (config) {
super (config)
}
//......
}
webpack 配置是:
var webpack = require('webpack');
var path = require('path')
module.exports = {
entry: [
path.resolve("./js/app.js")
],
output: {
path: path.resolve('./build'),
filename: "build.js"
},
module: {
loaders: [
{ test: /\.css$/, loader: 'style-loader!css-loader' },
{ test: /\.scss$/, loader: 'style!css!sass?sourceMap'},
{ test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'},
{ test: /\.json$/, loader: 'json-loader' },
{ test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015'],
plugins: ['transform-runtime']
}
}
]
},
resolve: {
modules: [
"./js",
"./node_modules"
],
extensions : ['.js', '.jsx', '.json']
},
resolveLoader: {
modules: ['node_modules']
},
node: {
console: true
},
plugins: [
new webpack.NoEmitOnErrorsPlugin(),
new webpack.ProvidePlugin({
'window.jQuery': 'jquery',
Promise: 'bluebird',
jQuery: 'jquery',
$: 'jquery'
})
]
};
主 app.js 只调用 myTestClass:
import MyClass from './myTestClass.js'
module.exports = async function() {
const myCls = new MyClass();
return '';
};
运行 webpack,我遇到了很多相同的错误:
Module not found: Error: Can't resolve 'fs'
如果我按照https://github.com/webpack-contrib/css-loader/issues/447 中的评论,即
node:{
fs:'empty'
}
可以构建,但是在客户端运行代码时,build.js会弹出错误。错误是:fs 未定义。我认为这是因为节点的 fs 设置为空。
var fs$ReadStream = fs.ReadStream
ReadStream.prototype = Object.create(fs$ReadStream.prototype)
ReadStream.prototype.open = ReadStream$open
您能否说明如何解决此问题?设置 fs = empty 是正确的用法吗?如果正确,build.js 有什么问题?
谢谢!
【问题讨论】:
-
我想我有什么问题。我混淆了服务器端模块和客户端工作流程:)
-
是的。 webpack 有一个配置选项 'target' (webpack.js.org/concepts/targets),你可以在你的配置文件中使用它。如果要捆绑 nodejs,请设置“目标:'node'”。对于客户端/浏览器设置“目标:'web'”。要同时执行服务器/客户端,请参阅medium.com/code-oil/…