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/'));
});

总结

  1. elixir将单独的js语句,可以直接通过闭包来进行封装调用,运行正常
  2. 其他的require的js,都作为了一个闭包来封装,但是必须js文件中包含module.exports=xxx才能正常返回对象

只是从个人体验的角度来说的,不了解nodejs的运作,欢迎各种批评

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!