我有一个node
模块,它使用依赖于fs
的模块,如利用fs.readFileSync
等。我无法手动删除这些依赖项,因为它们位于第2级或第3级包依赖项的第0级我的根模块。如何浏览节点`fs.readFileSync`使其在Chrome/Safari/IE中工作?
鉴于此,我必须在浏览器中运行这些模块,因此我尝试了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测试El Capitan
上的WebView
客户端代码。
如何在构建时摆脱这种情况?
您如何在无法访问文件系统的浏览器中获取文件? – adeneo
我不需要它,它是依赖关系所需要的,其中一些我根本没有使用,但我无法删除它们。在其他情况下,它就像本地'json'文件,'brsf'变换将在构建时加载 - 请参阅关于该链接的链接。这个问题似乎是'brfs'的静态评估没有考虑调用'fs.readFileSync(fileName)'等时使用变量的大部分模块的所有情况,等等。 – loretoparisi
http://stackoverflow.com/questions/16640177/browserify-with-requirefs – adeneo