Dru*_*tan 32 javascript gruntjs babeljs
我正在尝试使用Babel,但它对我来说效果不佳.
我的项目很简单
|-project/
|---src/
|-----index.html
|-----main.js
|-----module.js
|---Gruntfile.js
|---package.json
的index.html
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Test</title>
    <script src="main.js" type="application/javascript"></script>
</head>
<body>
<p>Simple html file.</p>
</body>
</html>
main.js
import * as math from "./module";
async function anwser() {
    return 42;
}
(function main() {
    anwser().then((v) => {
        console.info(v);
    });
    console.log(math.sum(5, 5));
})();
module.js
export function sum(x, y) {
    return x + y;
}
Gruntfile.js
module.exports = function(grunt) {
    grunt.initConfig({
        "babel": {
            "options": {
                "sourceMap": true,
                "experimental": true
            },
            dist: {
                files: [{
                    "expand": true,
                    "cwd": "src/",
                    "src": ["**/*.js"],
                    "dest": "build/",
                    "ext": ".js"
                }]
            }
        },
        htmlmin: {
            dist: {
                options: {
                    removeComments: true,
                    collapseWhitespace: true
                },
                files: [{
                    "expand": true,
                    "cwd": "src/",
                    "src": ["**/*.html"],
                    "dest": "build/",
                    "ext": ".html"
                }]
            }
        },
        watch: {
            scripts: {
                files: 'src/*.js',
                tasks: ["babel"]
            },
            html: {
                files: 'src/*.html',
                tasks: ["htmlmin"]
            }
        }
    });
    grunt.loadNpmTasks('grunt-babel');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-htmlmin');
    grunt.registerTask("default", ["babel", "htmlmin"]);
};
我运行咕噜声,一切都编译.但我不能使用有预期的结果.
首先,浏览器说require is not defined,所以我将require.js添加到我的HTML中.
然后,我明白了 Error: Module name "module" has not been loaded yet for context: _. Use require([]) http://requirejs.org/docs/errors.html#notloaded
我对所有这些都有些困惑.我如何使我的代码工作?
Xåp*_* - 28
要扩展veg_prog的答案,如果要将代码组织到模块中,则应使用类似Browserify的内容.Browserify可以通过grunt- browserify与Grunt一起使用,Babel可以通过babelify与Browserify一起使用.
我已经调整了一些文件来向您展示如何完成它:
的index.html
<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title>Test</title>
  <script src="bundle.js" type="application/javascript"></script>
</head>
<body>
  <p>Simple html file.</p>
</body>
</html>
main.js
import "babelify/polyfill"; // Needed for Babel's experimental features.
import * as math from "./module";
async function anwser() {
  return 42;
}
(function main() {
  anwser().then((v) => {
    console.info(v);
  });
  console.log(math.sum(5, 5));
})();
Gruntfile.js
module.exports = function(grunt) {
  grunt.initConfig({
    browserify: {
      dist: {
        options: {
          transform: [["babelify", { "stage": 0 }]]
        },
        files: {
          "build/bundle.js": "src/main.js"
        }
      }
    },
    htmlmin: {
      dist: {
        options: {
          removeComments: true,
          collapseWhitespace: true
        },
        files: [{
          "expand": true,
          "cwd": "src/",
          "src": ["**/*.html"],
          "dest": "build/",
          "ext": ".html"
        }]
      }
    },
    watch: {
      scripts: {
        files: "src/*.js",
        tasks: ["browserify"]
      },
      html: {
        files: "src/*.html",
        tasks: ["htmlmin"]
      }
    }
  });
  grunt.loadNpmTasks("grunt-browserify");
  grunt.loadNpmTasks("grunt-contrib-watch");
  grunt.loadNpmTasks("grunt-contrib-htmlmin");
  grunt.registerTask("default", ["browserify", "htmlmin"]);
};
的package.json
{
  "devDependencies": {
    "babelify": "6.0.1",
    "grunt": "0.4.5",
    "grunt-browserify": "3.6.0",
    "grunt-contrib-htmlmin": "0.4.0",
    "grunt-contrib-watch": "0.6.1"
  }
}
Nie*_*eek 13
Babel默认使用'common'.这对requirejs不起作用.所以,将模块更改为'amd'.
"babel": {
    "options": {
        "sourceMap": true,
        "experimental": true,
        "modules": "amd"        //This is the line to be added.
    },
    dist: {
        files: [{
            "expand": true,
            "cwd": "src/",
            "src": ["**/*.js"],
            "dest": "build/",
            "ext": ".js"
        }]
    }
}
Babel6的更新.另见http://babeljs.io/docs/plugins/transform-es2015-modules-amd/ 和https://babeljs.io/docs/plugins/
"babel": {
    "options": {
        "sourceMap": true,
        "experimental": true,
        "plugins": ["transform-es2015-modules-amd"] //This is the line to be added.
    },
    dist: {
        files: [{
            "expand": true,
            "cwd": "src/",
            "src": ["**/*.js"],
            "dest": "build/",
            "ext": ".js"
        }]
    }
}
小智 8
首先,浏览器说require没有定义,所以我将require.js添加到我的HTML中.
我不认为,添加require.js将是解决方案.在此上下文中,require是节点式语法:(https://github.com/substack/browserify-handbook#user-content-require).
Browserify是一个模块加载器,但与requirejs不同.requirejs也有一个babel发行版(https://github.com/mikach/requirejs-babel),但我建议使用browserify.
在一个设置中,babel正在使用browserify,就像这样
import $ from'jquery';
将成为这样的事情
var $ = require('jquery');
| 归档时间: | 
 | 
| 查看次数: | 31703 次 | 
| 最近记录: |