浏览包含package.json的文件夹时,Browserify会覆盖自己的配置
Browserify overrides its own configuration when browsing a folder that contains a package.json?
我使用AngularJS创建了一个简单的JavaScript应用程序。
我使用npm和Bower来管理我的依赖项,使用Gulp自动化我的任务,我想使用<strong]CommonJS>的module.exports
/require()
将所有内容捆绑在一起:我决定使用2Browserify将所有内容打包。
如果你想看看的话,Github上有我的非常空和干净项目。
为了能够使用require('angular')
,我将Browserify配置为将AngularJS填充到可用模块中,使用Browserify填充程序。非常简单,以下是我的package.json
:的相关部分
"browser": {
"angular": "./bower_components/angular/angular.min.js"
},
"browserify": {
"transform": [
"browserify-shim"
]
},
"browserify-shim": {
"angular": {
"exports": "angular"
}
}
它非常整洁,我的主JS文件现在看起来像这样:
'use strict';
var angular = require('angular');
angular.module('MyApp', [])
.controller('View1Ctrl', ['$scope', require('./view1/view1.js')])
.controller('View2Ctrl', ['$scope', require('./view2/view2.js')]);
这是有效的。
现在,我正在尝试使用通过Bower提供的外部库来了解一些更高级的内容。它们安装在bower_components
下,看起来很好,就像我的项目一样,它们有一个package.json
、bower.json
等等。
以ng对话框为例,该对话框也是require('angular')
。一旦通过bower install ng-dialog --save
检索到,我会做两件事:
- 将他们dist的JS文件链接到我的
package.json
中的关键字(比如ng-dialog
) require('ng-dialog')
在主JS文件中,以便让我的Angular模块依赖他们
以下是我的package.json
的更新相关部分(注意ng对话框是否不需要填充):
"browser": {
"angular": "./bower_components/angular/angular.min.js",
"ng-dialog": "./bower_components/ng-dialog/js/ngDialog.min.js"
},
"browserify": {
"transform": [
"browserify-shim"
]
},
"browserify-shim": {
"angular": {
"exports": "angular"
}
}
和我更新的app.js
文件:
'use strict';
var angular = require('angular');
require('ng-dialog');
angular.module('MyApp', ['ngDialog'])
.controller('View1Ctrl', ['$scope', require('./view1/view1.js')])
.controller('View2Ctrl', ['$scope', require('./view2/view2.js')]);
我在浏览时出现以下错误:
Error: Cannot find module 'angular' from 'C:'...'bower_components'ng-dialog'js'
经过半个小时的调整,SIMPLY从bower_components/ng-dialog
中删除package.json
文件使一切顺利。
发生了什么事,我到底该如何捆绑ngDialog.min.js
?
如Browserify手册中所述
browserfy使用的模块系统与node相同,因此发布到npm的包原本是用于node而非浏览器的,在浏览器中也可以正常工作。
越来越多的人将模块发布到npm,这些模块有意设计为使用browserfy在节点和浏览器中工作,npm上的许多包仅用于浏览器。npm适用于所有javascript,无论是前端还是后端。
因此,使用Angular
和ngDialog
包装的npm分布,而不是bower包装的
npm install angular ng-dialog --save
这将消除在package.json
中进行整个配置的需要,并且在项目中简单地调用require()
就可以进行浏览。
当我们需要项目中的任何节点模块时,browserfly捆绑相应节点模块的package.json的main
字段中的文件。目前,由于ngDialog的主字段引用了ngDialog.js
文件,因此您需要将其更改为ngDialog.min.js
,以便browserfy绑定该文件。(这不是一个主要问题,因为你使用gulp-uglify
压缩你的浏览捆绑包)
我已经分叉了你的代码并对其进行了必要的更改-请在此处查看https://github.com/pra85/angular-seed
- 在循环中分配json值时,值被覆盖
- 谷歌地图固定位置覆盖
- 只覆盖箭头键滚动事件
- JQuery覆盖不更改单选选项
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 当使用Watchify时,Browserify+Babelify Gulp任务没有终止
- 将添加一个相同类型的事件附加或覆盖以前添加的具有相同名称的事件
- 传单中如何在更改基层时启用/禁用覆盖层
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- HTML/CSS-用于拖放的全页面覆盖
- 让javascript知道epub3电子书中何时播放媒体覆盖
- 覆盖函数中的函数
- 无法覆盖CSS伪元素:before
- Gulp Browserify combine JS
- 如何覆盖原型中的事件侦听器
- 覆盖在赢得'不允许点击下面的标记,谷歌地图api v3
- 如何覆盖主干中的extend方法
- jQuery无法处理覆盖
- qoxdoo的代码覆盖工具
- 浏览包含package.json的文件夹时,Browserify会覆盖自己的配置