标签: browserify

如何使用browserify捆绑骨干应用程序?

我在使用browserify时遇到了一些麻烦.

目标

我正在尝试用Backbone构建基本的TodoMVC单页应用程序,而不是<script>在我的标签堆中index.html,我试图用browserify捆绑它们.

这是我到目前为止所做的事情.

LIB /模型/ todo.js

var backbone = require("backbone");

var Todo = module.exports = backbone.Model.extend({

  defaults: function() {
    return {
      title: "",
      completed: false,
      createdAt: Date.now(),
    };
  },

});
Run Code Online (Sandbox Code Playgroud)

LIB /收藏/ todo.js

var backbone     = require("backbone"),
    LocalStorage = require("backbone.localstorage");

var TodoCollection = module.exports = backbone.Collection.extend({

  localStorage: new LocalStorage('todomvc'),

});
Run Code Online (Sandbox Code Playgroud)

LIB/app.js

var Todo            = require("./models/todo"),
    TodoCollection  = require("./collections/todo");

(function(global) {

  global.todoCollection = new TodoCollection([], {model: Todo});

})(window);
Run Code Online (Sandbox Code Playgroud)

要构建我的包,我正在使用

browserify lib/app.js > js/app.js
Run Code Online (Sandbox Code Playgroud)

最后,我index.html很简单 …

javascript node.js backbone.js browserify

11
推荐指数
1
解决办法
9706
查看次数

使用browserify填充jQuery插件

嗨我正在使用grunt browserify任务来设置我的代码,我已经在jQuery中填充了,我现在正在尝试包含jquery.tablesorter.

jquery插件可以用这种方式与browserify一起使用吗?

shim: {
    jquery: {
        path: 'lib/bower/jquery/jquery.js',
        exports: '$'
    },
    'jquery.tablesorter': {
        path: 'lib/bower/jquery.tablesorter/js/jquery.tablesorter.js',
        exports: 'tablesorter',
        depends: {
            jquery: '$',
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript jquery shim browserify gruntjs

11
推荐指数
1
解决办法
1万
查看次数

Browserify"模块未定义"

我是浏览器的新手.我尝试了下面的代码,并Uncaught ReferenceError: module is not defined在加载我的网页时得到了.一切都很简单,所以不确定我做错了什么:

chronoOpenList.js:

module.exports = function getChronoOpenList() {
    var xml = new XMLHttpRequest();
    xml.open("GET", "api/nextrequestdue/", true);
    xml.onreadystatechange = function () {
        if (xml.readyState === 4 && xml.status === 200) {
            var jsonText =  xml.responseText;
            parseChronoAndBuildElements(jsonText);
        }
    }
    xml.send(null);
}
Run Code Online (Sandbox Code Playgroud)

main.js:

var getChronoOpenList = require('./chronoOpenList');
getChronoOpenList();
Run Code Online (Sandbox Code Playgroud)

HTML:

<script style="text/javascript" src="{% static 'js/bundle.js' %}"></script>
Run Code Online (Sandbox Code Playgroud)

浏览器的命令:

one@chat-dash /home/git/recognizer/recognizer_project/static/js $ /usr/local/lib/node_modules/browserify/bin/cmd.js main.js -o bundle.js
Run Code Online (Sandbox Code Playgroud)

bundle.js:

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var …
Run Code Online (Sandbox Code Playgroud)

javascript node.js browserify

11
推荐指数
1
解决办法
2525
查看次数

Browserify basedir选项(类似RequireJS)

我想不出该怎么browserify basedir选项工程..

注意:我对整个basedir概念的理解可能是错的,因为我来自RequireJS(想想baseUrl).

编辑 确实我错了,但你仍然可以实现我试图做的paths选项,请参阅下面的答案.

我知道该basedir选项为您提供了.从静态根/基础目录中指定所有需要路径(以a开头)的能力(自由!)而不是来自process.cwd()..

这实际上让我发疯,我虽然这样的功能实现起来非常基础,并且很多人会遇到与我相同的问题,但网上实际上很少有关于如何正确设置的信息basedir选择..相信我,这不是直截了当的..

所以这是让我疯狂的基本例子.

给定以下文件结构:

js/
js/app.js
js/src/models/Person.js
js/src/views/PersonView.js
Run Code Online (Sandbox Code Playgroud)

并运行:

var browserify = require('browserify');
var gulp = require('gulp');

gulp.task('scripts', function() {

  var b = browserify('./app', {basedir: './js'});

  b.bundle().pipe(gulp.dest('./dist'));
});
Run Code Online (Sandbox Code Playgroud)

我希望能够进行以下require()调用PersonView.js:

var Person = require('./src/models/Person');
...
Run Code Online (Sandbox Code Playgroud)

而不是(显然工作......):

var Person = require('../models/Person');
...
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Error: module "./src/models/Person" not found from "/Users/...some path.../js/src/views/PersonView.js"
Run Code Online (Sandbox Code Playgroud)

我对这个basedir选项缺少什么?

browserify gulp

11
推荐指数
1
解决办法
7965
查看次数

使用browserify使bower与npm一起工作

我们既受到各种各样的JavaScript包管理解决方案的祝福和诅咒,所有这些都有各自的优点.由于这里无关紧要的原因,我已经确定了我的主要解决方案.但是,在其他系统(例如凉亭和组件)上有太多好的代码可以忽略这些解决方案.因此,我希望建立一个环境,我可以使用browserify从npm和bower加载包(我们将为另一个问题保存组件).

到目前为止,我提出的最好的方法是使用运行package.jsonpostinstall脚本来设置我bower install:

{
  ... configuration ...

  "scripts": {
    "postinstall": "bower install"
  }
}
Run Code Online (Sandbox Code Playgroud)

这在构建第一级依赖项(即strait bower依赖项和strait npm依赖项)时构建正确的目录结构:

- MyMixedComponent
  - main.js
  - package.json
  - node_modules
    - npmDependency
  - bower_components
    - bowerComponent
Run Code Online (Sandbox Code Playgroud)

使用browserify上的debowerify转换可以很好地构建,browserify -t debowerify 但是,当我想在另一个项目中从npm安装MyMixedComponent时npm install MyMixedComponent,目录结构就像你期望的那样构建了npm:

- MyNewProject
  - main.js
  - package.json
  - node_modules
    - MyMixedComponent
      - main.js
      - package.json
      - node_modules
        - npmDependency
      - bower_components
        - bowerComponent
Run Code Online (Sandbox Code Playgroud)

由于bower是一个平面依赖树,当使用browserify和debowerify进行构建时,这当然不起作用.实际需要的是这样的:

- MyNewProject
  - main.js
  - package.json
  - …
Run Code Online (Sandbox Code Playgroud)

commonjs node.js npm browserify bower

11
推荐指数
1
解决办法
3059
查看次数

节点JS fs模块在浏览器中

我有一个场景,我想从客户端将数据导出到CSV.我将有一个文本框/区域或用户可以输入数据的任何位置,然后理想情况下只需单击一下,本地CSV文件将使用该数据进行更新.

这可以通过NodeJS与服务器交互及其核心模块(特别是fs模块)轻松实现,但显然不是来自浏览器.

我发现某些节点模块(例如underscore)支持RequireJS使特定模块在浏览器中工作的方法.所以对于下划线我做了这个:

methods.js

define(['underscore'],function(_) {

    var Methods = {
        doSomething: function() {

            var x = _.size({one: 1, two: 2, three: 3, xuz: 3});

            alert(x);
        }
    };

    return Methods;
});
Run Code Online (Sandbox Code Playgroud)

common.js

requirejs.config({
    baseURL: 'node_modules',
    paths: {
        underscore: 'underscore/underscore',
    }
});

require(['methods'], function(y){
    y.doSomething();
});
Run Code Online (Sandbox Code Playgroud)

的index.html

<script data-main="common" src="require.js"></script>
<script>
require(['common'], function() {

    require(['methods.js']);
});
</script>
Run Code Online (Sandbox Code Playgroud)

以上工作正常,并将显示警报:4.

但是当我尝试使用fs模块时,它将无法正常工作.它会显示此错误:

Module name "util" has not been loaded yet for context: _. Use require([])
Run Code Online (Sandbox Code Playgroud)

据我所知,这是因为fs需要其他几个模块,其中一个是util …

javascript module node.js requirejs browserify

11
推荐指数
1
解决办法
1万
查看次数

在gulp中传递文件到browserify时使用glob匹配

我使用browserify和gulp看到的所有示例都假设您只想浏览1个文件.通常情况并非如此.

我遇到了一个使用乙烯基变换的例子,但我无法让它正常工作.这是(咖啡脚本)代码:

# Browserify JS

gulp.task 'browserify', [], ->

    # Create the transform
    br = transform (f) ->
        return browserify(f).bundle()

    # Run browserify
    gulp.src(['./public/js/**/*.js'])
        .pipe(br)
        .pipe(gulp.dest('.'))
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

[10:50:55] Starting 'browserify'...

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: write after end
Run Code Online (Sandbox Code Playgroud)

javascript coffeescript browserify gulp

11
推荐指数
1
解决办法
3419
查看次数

如何创建独立的browserify bundle直接导出到窗口?

我想创建一个独立的browserify包,它将导出的对象直接附加到window对象,而不是嵌套在附加到的包装器对象下window.

这样做,browserify忽略窗口:

browserify main.js --standalone window > bundle.js
Run Code Online (Sandbox Code Playgroud)

main.js文件如下所示:

var ModuleA = require('./module-a.js');
var ModuleB = require('./module-b.js');

module.exports = {
  ModuleA: ModuleA,
  ModuleB: ModuleB
}
Run Code Online (Sandbox Code Playgroud)

我希望两个模块直接在全局命名空间中公开:window.ModuleAwindow.ModuleB.

文件没有提供明显的解决方案.

你能帮我吗?

browserify

11
推荐指数
2
解决办法
6014
查看次数

Node/NPM:一个npm包可以暴露多个文件吗?

我已经为Web开发创建了一个JS库,它由几个模块组成,这些模块构建了多个分发版本.当它通过cdn或例如使用Bower分发时,它很好.

但现在我正在尝试使用NPM发布它,以便可以使用Browserify进行消费.我的问题是如何静态暴露多个主文件,以便Browserify可以使用它们.

node.js npm browserify

10
推荐指数
1
解决办法
3899
查看次数

browserify找不到模块'反应'

我有一点反应代码叫main.js:

var React = require('react');

var Comment = React.createClass({
render: function(){
  return (
    <div className="comment">
      <h2 className="commentAuthor">
        {this.props.author}
      </h2>
      <span dangerouslySetInnerHTML={{__html:marked(this.props.children.toString(), {sanitize:true})}} />
    </div>
  );
}
});
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用browserify并使用它重新执行:

browserify -t reactify main.js

但是我收到了这个错误:

Error: Cannot find module 'react' from '/Users/jameslin/projects/reactjs/react-0.13.2'
    at /usr/local/lib/node_modules/browserify/node_modules/resolve/lib/async.js:46:17
    at process (/usr/local/lib/node_modules/browserify/node_modules/resolve/lib/async.js:173:43)
    at ondir (/usr/local/lib/node_modules/browserify/node_modules/resolve/lib/async.js:188:17)
    at load (/usr/local/lib/node_modules/browserify/node_modules/resolve/lib/async.js:69:43)
    at onex (/usr/local/lib/node_modules/browserify/node_modules/resolve/lib/async.js:92:31)
    at /usr/local/lib/node_modules/browserify/node_modules/resolve/lib/async.js:22:47
    at Object.oncomplete (fs.js:107:15)
Run Code Online (Sandbox Code Playgroud)

鉴于我已安装reactreactifynpm模块:

  • npm install -g react
  • npm install -g reactify

browserify reactjs reactify

10
推荐指数
1
解决办法
1万
查看次数