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 的运作,欢迎各种批评
推荐文章: