如何浏览节点 `fs.readFileSync` 以使其在 Chrome/Safari/IE 中工作?
How to browserify node `fs.readFileSync` to make it work in Chrome/Safari/IE?
我有一个 node
模块,它使用依赖于 fs
的模块,例如使用 fs.readFileSync
等。我无法手动删除这些依赖项,因为它们处于第 2 级或第 3 级具有 0 级我的根模块的包依赖项。
鉴于此,
我必须在浏览器中 运行 那些模块,所以我尝试了 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
I 运行 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
客户端代码。
如何在构建时摆脱它?
我遇到了类似的问题。
确定哪个模块正在调用 mime
并找到替代模块。对我来说,这是 url-loader
,它取决于 mime
。
我将其替换为 file-loader
,它不依赖于 mime
,因此不依赖于 fs
。确保卸载 url-loader
,因为它仍然会抛出错误!
我有一个 node
模块,它使用依赖于 fs
的模块,例如使用 fs.readFileSync
等。我无法手动删除这些依赖项,因为它们处于第 2 级或第 3 级具有 0 级我的根模块的包依赖项。
鉴于此,
我必须在浏览器中 运行 那些模块,所以我尝试了 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
I 运行 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
客户端代码。
如何在构建时摆脱它?
我遇到了类似的问题。
确定哪个模块正在调用 mime
并找到替代模块。对我来说,这是 url-loader
,它取决于 mime
。
我将其替换为 file-loader
,它不依赖于 mime
,因此不依赖于 fs
。确保卸载 url-loader
,因为它仍然会抛出错误!