[英]How to perform a transform on npm module using browserify
默认情况下,browserify不会对node_modules中包含的模块执行转换,即不使用路径。
我做了一个快速的github回购, 在这里说明了它。 获得浏览器化的index.js
文件如下所示:
var fs = require('fs');
var testmodule = require('testmodule');
var trg1 = document.getElementById("target1");
var trg2 = document.getElementById("target2");
trg1.innerHTML = fs.readFileSync(__dirname+"/something.txt");
trg2.innerHTML = testmodule();
testmodule
看起来像这样:
var fs = require('fs');
exports = module.exports = function() {
return fs.readFileSync(__dirname+'/data.txt');
}
使用brfs
转换模块,我希望能够内联对fs.readFileSync
两个调用,但是当我运行browserify index.js -t brfs -o bundle.js
,只有我的主项目中的调用才会被内联。 这是bundle.js的结果:
;(function(e,t,n){function r(n,i){if(!t[n]){if(!e[n]){var s=typeof require=="function"&&require;if(!i&&s)return s(n,!0);throw new Error("Cannot find module '"+n+"'")}var o=t[n]={exports:{}};e[n][0](function(t){var i=e[n][1][t];return r(i?i:t)},o,o.exports)}return t[n].exports}for(var i=0;i<n.length;i++)r(n[i]);return r})({1:[function(require,module,exports){
// nothing to see here... no file methods for the browser
},{}],2:[function(require,module,exports){
var fs = require('fs');
var testmodule = require('testmodule');
var trg1 = document.getElementById("target1");
var trg2 = document.getElementById("target2");
trg1.innerHTML = "This is data from a file in the main project folder"; // TRANSFORMED
trg2.innerHTML = testmodule();
},{"fs":1,"testmodule":3}],3:[function(require,module,exports){
(function(__dirname){var fs = require('fs');
exports = module.exports = function() {
return fs.readFileSync(__dirname+'/data.txt'); // NO TRANSFORM
}
})("/node_modules/testmodule")
},{"fs":1}]},{},[2])
;
得到了一些来自substack(browserify的作者)的帮助。 要指定项目外部的模块是否需要转换,您需要在package.json
指定browserify.transform
数组。 因此,对于上面给出的示例, testmodule
目录中的package.json文件如下所示:
{
"name":"testmodule",
"version":"0.0.0",
"browserify": {
"transform": ["brfs"]
},
"main": "index.js"
}
您也可以使用browserify -g brfs
而不是browserify -t brfs
。 g
是一个全局变换(适用于依赖项)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.