You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 1.6.9+gulp-browsify打包后注入@uiRouter报错,换angular-route正常求助

解决Angular 1.6.9 + gulp-browserify + UI Router的[ng:cpws]错误

我之前也碰到过几乎一模一样的问题,用Browserify打包UI Router时触发这个[ng:cpws]错误,本质是Angular的依赖注入机制和Browserify的CommonJS模块加载之间的冲突导致的,尤其是UI Router的初始化逻辑和全局Angular实例的交互出了问题。下面是我排查和解决的步骤:

1. 确认UI Router的引入与注册方式是否正确

很多时候错误源于没有正确把UI Router作为CommonJS模块引入并注册到Angular模块中。在你的app.js里,别直接写字符串'ui.router',而是先require模块,再传入依赖数组:

// 正确的引入方式
var angular = require('angular');
var uiRouter = require('@uirouter/angularjs');

// 注册模块时使用引入的变量,而非字符串
angular.module('yourAppName', [uiRouter]);

如果直接写['ui.router'],Browserify可能没正确把UI Router的代码打包进bundle,导致Angular找不到对应的模块,进而触发奇怪的复制错误。

2. 配置browserify-shim处理全局Angular依赖

Angular 1.x本质是全局库,而Browserify默认是CommonJS模块加载,这时候需要用browserify-shim来桥接两者。

首先安装依赖:

npm install browserify-shim --save-dev

然后在package.json里添加shim配置:

"browserify-shim": {
  "angular": "global:angular",
  "@uirouter/angularjs": {
    "depends": ["angular"],
    "exports": "uiRouter"
  }
},
"browser": {
  "angular": "./node_modules/angular/angular.js",
  "@uirouter/angularjs": "./node_modules/@uirouter/angularjs/release/angular-ui-router.js"
}

接下来修改你的gulpfile.js里的Browserify任务,启用shim:

var browserify = require('browserify');
var shim = require('browserify-shim');
var source = require('vinyl-source-stream');

gulp.task('bundle', function() {
  return browserify('./path/to/app.js')
    .transform(shim) // 这里添加shim转换
    .bundle()
    .pipe(source('app-release.js'))
    .pipe(gulp.dest('./dist/js'));
});

这个配置会告诉Browserify如何正确识别Angular和UI Router的全局变量,避免模块加载时的冲突。

3. 检查UI Router版本兼容性

Angular 1.6.9是比较老的版本,确保你安装的@uirouter/angularjs版本和它兼容。建议安装^1.0.29版本(这个版本经过验证能和Angular 1.6.x完美配合):

npm install @uirouter/angularjs@1.0.29 --save

新版本的UI Router可能对Angular 1.6.x的支持不好,导致初始化时出现异常。

4. 验证打包后的脚本加载顺序

虽然你打包成了单个文件,但还是要确保app-release.js是在所有依赖之后加载(不过Browserify已经把所有依赖打包进去了,所以只要在index.html里只引入这个bundle文件即可):

<!-- 只需要引入打包后的文件 -->
<script src="dist/js/app-release.js"></script>

别再单独引入angular.js或者ui-router.js了,否则会出现全局变量重复的问题。

按照上面的步骤调整后,重新运行gulp打包任务,应该就能解决这个Can't copy! Making copies of Window or Scope instances is not supported的错误了。

内容的提问来源于stack exchange,提问作者Alexandra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:11:57