2013-04-19 17 views
17

Theo mặc định, browserify không thực hiện các biến đổi trên mô-đun được bao gồm từ node_modules, tức là không có đường dẫn.Cách thực hiện chuyển đổi trên mô-đun npm bằng cách sử dụng browserify

Tôi đã thực hiện một repo github nhanh chóng minh họa nó here. Các tập tin index.js đó được browserified trông như thế này:

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 trông như thế này:

var fs = require('fs'); 
exports = module.exports = function() { 
    return fs.readFileSync(__dirname+'/data.txt'); 
} 

Sử dụng brfs chuyển đổi mô-đun, tôi muốn để có thể inline cả các cuộc gọi đến fs.readFileSync, nhưng khi tôi chạy browserify index.js -t brfs -o bundle.js, chỉ cuộc gọi trong dự án chính của tôi được nội tuyến. Đây là kết quả 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]) 
; 

Trả lời

23

Có một số trợ giúp từ substack (tác giả của trình duyệt) trên trang này. Để chỉ định liệu một mô-đun bên ngoài dự án có yêu cầu chuyển đổi hay không, bạn cần chỉ định mảng browserify.transform trong số package.json của mình. Vì vậy, ví dụ như tôi đã nêu trên, các tập tin trong thư mục package.json testmodule trông như thế này:

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

tại sao bạn không đánh dấu câu trả lời này là câu trả lời đúng? – xorinzor

+1

tôi sẽ đến ngay sau khi tôi viết nó, nhưng dường như nó sẽ không cho phép tôi làm điều đó cho đến 2 ngày sau đó, và tôi đã quên tại thời điểm đó ... – AndyPerlitch

+0

Bạn đã cứu tôi! Cảm ơn nhiều! –

0

Bạn cũng có thể sử dụng browserify -g brfs thay vì browserify -t brfs. g là một biến đổi toàn cầu (áp dụng cho các phụ thuộc)

Các vấn đề liên quan