我有一个node
模块,该模块使用依赖于fs
的模块,例如利用fs.readFileSync
等。由于处于根模块级别0的软件包依赖项的第2或第3层,因此我无法手动删除这些依赖项。
鉴于,
我必须在浏览器中运行这些模块,因此我尝试了browserify
和webpack
。
我的webpack
配置如下
var path = require('path');
var webpack = require("webpack");
module.exports = {
entry: './pgapi',
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
noParse: /node_modules\/json-schema\/lib\/validate\.js/,
loaders: [
{ test: /\.json$/, loader: 'json-loader' }
, {
test: /\.js$/,
loader: "transform?brfs"
}
]
},
resolve: {
extensions: ['', '.webpack.js', '.web.js', '.js']
},
node: {
console: true,
fs: 'empty',
net: 'empty',
tls: 'empty'
},
plugins: [
//new webpack.optimize.UglifyJsPlugin(),
//new webpack.optimize.DedupePlugin(),
new webpack.DefinePlugin({
__DEV__: true
})
]
};
我正在使用
browserify
作为brfs
转换的替代项,以尝试照顾fs.readFileSync
等。构建
bundle.js
之后,我运行babel
,因为在Safari
中没有完全符合ES5 strict mode
的要求,而且它还要照顾arrow operator
以及不受支持的let
和const
以及使用此脚本:var fs = require('fs')
var args = process.argv.slice(2);
var code=fs.readFileSync(args[0])
var res=require("babel-core").transform(code, {
plugins: [
"transform-es2015-arrow-functions",
"transform-es2015-constants",
"transform-es2015-block-scoping"]
});
console.log(res.code)
所以我喜欢
$ webpack
或$ browserify mymodule.js -o dist/bundle.js -t brfs
然后在
dist/bundle.js
$ node babelify.js dist/bundle.js > out.js
。然后发生的是一个
ReferenceError: Can't find variable: fs
(请参阅here)这似乎是由于
brsf
转换确实可以在静态表达式eval上工作,所以它不能理解fs.readFileSync(varname)
中的变量。我在Xcode中使用MacGap在
WebView
上测试El Capitan
客户端代码。如何在构建时摆脱这种情况?
最佳答案
我有一个类似的问题。
确定哪个模块正在调用mime
并找到备用模块。对我来说,这是url-loader
,它取决于mime
。
我用不依赖file-loader
的mime
代替了它,因此不依赖fs
。确保卸载url-loader
,因为它仍然会引发错误!
关于javascript - 如何浏览器 Node fs.readFileSync以使其在Chrome/Safari/IE中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38546141/