2016-07-23 19 views
0

我有一个node模块,它使用依赖于fs的模块,如利用fs.readFileSync等。我无法手动删除这些依赖项,因为它们位于第2级或第3级包依赖项的第0级我的根模块。如何浏览节点`fs.readFileSync`使其在Chrome/Safari/IE中工作?

鉴于此,我必须在浏览器中运行这些模块,因此我尝试了browserifywebpack。 我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 operatorletconst,这些脚本也不支持使用此脚本:

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客户端代码。

如何在构建时摆脱这种情况?

+2

您如何在无法访问文件系统的浏览器中获取文件? – adeneo

+0

我不需要它,它是依赖关系所需要的,其中一些我根本没有使用,但我无法删除它们。在其他情况下,它就像本地'json'文件,'brsf'变换将在构建时加载 - 请参阅关于该链接的链接。这个问题似乎是'brfs'的静态评估没有考虑调用'fs.readFileSync(fileName)'等时使用变量的大部分模块的所有情况,等等。 – loretoparisi

+0

http://stackoverflow.com/questions/16640177/browserify-with-requirefs – adeneo

回答

1

我有类似的问题。

确定哪个模块正在调用mime并找到替代模块。对我而言,这是url-loader,这取决于mime

我用file-loader替换它,它不依赖于mime,因此不取决于fs。确保卸载url-loader,因为它仍然会抛出错误!

相关问题