Подтвердить что ты не робот

Как выполнить преобразование на модуле npm с помощью браузера

По умолчанию браузер не выполняет преобразования на модули, входящие в состав 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])
;
4b9b3361

Ответ 1

Получите некоторую помощь от substack (автора браузера) на этом. Чтобы указать, нуждается ли модуль вне проекта в преобразовании, вам нужно указать массив browserify.transform в package.json. Итак, для примера, приведенного выше, файл package.json в каталоге testmodule выглядит следующим образом:

{
    "name":"testmodule",
    "version":"0.0.0",
    "browserify": {
        "transform": ["brfs"]
    },
    "main": "index.js"
}

Ответ 2

Вы также можете использовать browserify -g brfs вместо browserify -t brfs. g - глобальное преобразование (применимое к зависимостям)