首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >很难获得褐变-shim与(> 2.0.2)作为转换。

很难获得褐变-shim与(> 2.0.2)作为转换。
EN

Stack Overflow用户
提问于 2014-04-11 17:40:31
回答 3查看 9.6K关注 0票数 11

grunt-browserify的2.0.2版本中,browserify-shim被从模块本身中删除并转换为transform,而不是直接用于grunt-browserify任务的option

使用带有的shim的版本的grunt-browserify看起来是这样的:

代码语言:javascript
复制
'libs-dev': {
    src: [path.join('<%= config.dirs.browserLibs %>', 'angular', 'angular.js')],
    dest: path.join('<%= config.dirs.dest.dev %>', 'js', 'libs.js'),
    options: {
        shim: {
            angular: {
                path: path.join('<%= config.dirs.browserLibs %>', 'angular', 'angular.js'),
                exports: 'angular'
            }
        }
    }
}

这非常有效,并在libs.js模块周围生成了一个包装器,如下所示:

代码语言:javascript
复制
require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({"angular":[function(require,module,exports){
    module.exports=require('i10PRm');
},{}],"i10PRm":[function(require,module,exports){
    (function(global){(function browserifyShim(module, exports, define, browserify_shim__define__module__export__) {
        browserify_shim__define__module__export__(typeof angular != "undefined" ? angular : window.angular);
    }).call(global, undefined, undefined, undefined, function defineExport(ex) { module.exports = ex; });
})(window)
},{}]},{},["i10PRm"]);

但是,基于(令人难以置信的稀疏和令人沮丧的)文档,版本的grunt-browserify中的shim被用作transform,如下所示:

代码语言:javascript
复制
'libs-dev': {
    src: [path.join('<%= config.dirs.browserLibs %>', 'angular', 'angular.js')],
    dest: path.join('<%= config.dirs.dest.dev %>', 'js', 'libs.js'),
    options: {
        transform: ['browserify-shim']
    }
}

而且,由于browserify-shim的配置现在完全基于package.json配置,我的package.json看起来是这样的:

代码语言:javascript
复制
"browser": {
    "angular": "./bower_components/angular/angular.js"
},
"browserify-shim": {
    "angular": "angular"
}

但是,这会生成一个包装器,外观如下:

代码语言:javascript
复制
(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 n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
    (function (global){
        __browserify_shim_require__=require;(function browserifyShim(module, exports, require, define, browserify_shim__define__module__export__) {
            browserify_shim__define__module__export__(typeof angular != "undefined" ? angular : window.angular);
    }).call(global, undefined, undefined, undefined, undefined, function defineExport(ex) { module.exports = ex; });
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{}]},{},[1]);

正如您所看到的,这个新包装器缺少了一些东西;似乎没有一个等价于在旧包装器中分配的i10PRm导出值。据推测,这意味着我以某种方式错误地使用了导出,尽管我遵循的是browserify-shim文档,而且这一切看起来都相当简单。

对于grunt-browserify (>= 2.0.2)和browserify-shim的最新版本以及如何正确地将它们一起使用的任何帮助或清晰性,都会很感兴趣。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-13 22:03:35

为了子孙后代的利益,我只是进行了一次更新:我放弃了grunt-browserify,只在命令行的browserify中使用了browserify-shim。它立即工作,完全没有任何问题。

我相信,这三个库(browserifygrunt-browserifybrowserify-shim)的组合都是简单地更新和更改得太快,无法在更新时依赖它们一起工作。放弃grunt组件使剩下的两个组件更易于管理。

褐化似乎同意的创建者

...in我的经验,每当人们将浏览器化和浏览器化-shim(这两者在package.json中都是完全可配置的)包装在任务运行程序中时,他们的生活就变得更加艰难了。

票数 16
EN

Stack Overflow用户

发布于 2014-04-23 11:46:05

我对这个设置也很纠结,但我设法使它工作,完全从我的Gruntfile.js中移除垫片设置,并让browserifypackage.json中处理它们。在这里,我使用了带有jquery的shim,您还可以看到我在下面运行的版本:

代码语言:javascript
复制
// portion of package.json

"browser": {
    "jquery": "./js/lib/jquery-1.11.0.min.js"
},
"browserify-shim": {
    "jquery": "$"
},
"browserify": {
    "transform": [
        "browserify-shim"
    ]
},
"devDependencies": {
    "grunt": "~0.4.1",
    "grunt-cli": "~0.1.10",
    "browserify": "~3.44.2",
    "browserify-shim": "~3.4.1",
    "grunt-browserify": "~2.0.8"
}

我的Gruntfile.js的相关部分现在如下所示:

代码语言:javascript
复制
// portion of Gruntfile.js

browserify: {
    bundleOptions: {
        debug: true
    },
    src: 'js/src/main.js',
    dest: 'js/output.js'
},

grunt:browserify现在按预期的方式工作,调用browserify,但允许它自己处理browserify-shim

票数 10
EN

Stack Overflow用户

发布于 2015-12-13 04:13:50

不要通过grunt watch运行浏览器化,这不会反映您在中间所做的更改。

因此,当您更改package.json文件时,请通过grunt broswerify运行浏览器化任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23019194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档