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 的运作,欢迎各种批评

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。