elixir 打包 RequireJS 遇到的问题
找不到require命令
尝试将requirejs和vuejs以及自己写的js,一起打包。gulp命令之后,运行网页发现控制台找不到requirejs命令~~
define('Sunshine',function($){
var handle = function () {
alert('Sunshine.handle');
}
return {
handle:handle,
}
});
当使用npm install requirejs
的时候,下载包,里面的bin/r.js
是提供给nodejs用的,运行在服务端,require.js
是提供给浏览器用的。
然后理所当然,将require('requirejs')
改为require('requirejs/require')
来加载包下面的requirejs.js文件,但是还是不可以
elixir非标准的node模块无法直接合并使用
后来在requirejs.js 文件底部添加了一行代码module.exports=require
,这样就可以生效require了,但是实际elixir
通过将匿名闭包构成的数组传递给方法来递归调用,触发对象。
应该是elixir模拟了node的模块加载方式,提供给浏览器使用,方便兼容调用node的模块
define命令被解析了
又遇到问题define的amd模块不能执行,找不到了,看下压缩合并后的js代码,发现原来的define命令替换了,但是效果是直接将define定义的模块,直接执行,得到了对象(这肯定不是我要的效果)。
gulp直接写task解决
所以后来不用elixir了,改成了直接用gulp写task
var gulp = require('gulp');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
gulp.task('default',function() {
return gulp.src(['public/js/*.js'])
.pipe(concat('index.js')) // 合并
.pipe(uglify()) // 压缩
.pipe(gulp.dest('public/build/js/'));
});
总结
- elixir将单独的js语句,可以直接通过闭包来进行封装调用,运行正常
- 其他的require的js,都作为了一个闭包来封装,但是必须js文件中包含module.exports=xxx才能正常返回对象
只是从个人体验的角度来说的,不了解nodejs的运作,欢迎各种批评
推荐文章: