2013-05-19 34 views
22

Tôi đã cố gắng sử dụng browserify trên một tệp có sử dụng đối tượng fs. Khi tôi duyệt nó, cuộc gọi đến require('fs') không được chuyển đổi và require trả lại {}.Trình duyệt với yêu cầu ('fs')

Có cách giải quyết nào cho vấn đề này không? Tôi đã nhìn thấy một số gợi ý trên stackoverlow và ở nơi khác, nhưng không ai có vẻ được thực hiện đầy đủ.

Tôi thực sự hy vọng tạo một ứng dụng đóng gói web của google bằng cách sử dụng browserify cho lớp tôi dạy.

Xin cảm ơn trước.

Trả lời

6

Trình duyệt sẽ sử dụng hệ thống tệp nào? Hệ thống tệp HTML5 không thực sự có thể so sánh với một hệ thống tệp truyền thống. Nó không có các liên kết tượng trưng, ​​và nó chỉ có thể truy cập không đồng bộ bên ngoài các Web Worker.

Vì vậy, câu trả lời là: Tự mình viết một lớp trừu tượng có thể dựa vào mô đun fs khi chạy trong Node.js và API HTML5 FS khi chạy trong trình duyệt. Sự khác biệt quá lớn để có trình duyệt dịch cho bạn.

+3

Tôi đoán tôi mong chờ tại ít nhất browserify rằng sẽ để lại nhận xét trong mã browserified chỉ ra rằng nó không hỗ trợ mô-đun fs. –

+0

Có lẽ một "lớp trừu tượng" không thích hợp ở đây, nhưng việc triển khai FileReader vv trong node.js có thể là (như là một phần của trình duyệt).
Dù sao, tôi vui mừng khi biết rằng sự biến đổi còn thiếu là một tính năng chứ không phải là một "lỗi" về phía tôi. –

41

Nếu bạn muốn nội tuyến nội dung tập tin từ fs.readFileSync() cuộc gọi, bạn có thể sử dụng brfs:

var fs = require('fs'); 
var src = fs.readFileSync(__dirname + '/file.txt'); 

sau đó làm:

browserify -t brfs main.js > bundle.js 

src sẽ được thiết lập để các nội dung của file.txt tại thời gian biên dịch .

+0

Ý tưởng thú vị, nhưng không đáp ứng được nhu cầu của tôi. –

14

Nếu bạn muốn chạy hệ thống tệp với trình duyệt, bạn có thể cài đặt npm.

npm install browserify-fs 

và bạn có thể truy cập đối tượng fs ở phía máy khách.
Cảm ơn

+1

Tôi thực sự đã cài đặt browserify-fs và yêu cầu nó nhưng tôi vẫn nhận được lỗi tương tự được gọi là "fs.readFileSync không phải là một hàm" – Preprocezzor

0

Đối với bất kỳ ai trên Google, tôi đã may mắn hơn nhiều với việc biến đổi chuỗi.

https://github.com/JohnPostlethwait/stringify

Những câu trả lời ở đây là bực bội (mặc dù không mong muốn) Tôi đang nhập khẩu các mẫu như chuỗi thành các thành phần của tôi để tiết kiệm HTTP yêu cầu mua về bởi templateUrl và giữ họ ra khỏi các tập tin javascript.

Vì một số lý do, brfs không phát độc đáo với babel và có rất nhiều cảnh báo để làm việc cả.

Tôi không thể nhận được browserify-fs để hoạt động.

Tuy nhiên, sau khi tìm kiếm stringify, biến đổi đơn giản như vậy.

import template from '../template.html' 

const definition = { template } 

component.directive('myDirective',() => definition) 

dịch cho người dùng ES5:

var template = require('../template.html') 

component.directive('myDirective', function() { 
    return { 
     template: template 
    } 
}) 
Các vấn đề liên quan