如何运行webpack转换的函数?

Las*_*ash 6 javascript node.js ecmascript-6 webpack

我有一个简单的库,我正在使用ES6,我有一些require关键字,然后,我需要将其转换为浏览器理解它的版本,我使用webpack来制作我的库的浏览器版本.

这是一个例子:


main.js

import Test from './test';

function callMe(){
    console.log("I am damn called!");
}
Run Code Online (Sandbox Code Playgroud)

test.js

export default function(string) {
  console.log("This is awesome!");
  [1,2,3].map(n => n + 1);
}
Run Code Online (Sandbox Code Playgroud)

gulpfile.js(我用Gulp)

var gulp = require('gulp');
var babel = require('gulp-babel'); 
gulp.task('babel', () => {
    return gulp.src('src/*.js')
        .pipe(babel({
            presets: ['es2015']
        }))
        .pipe(gulp.dest('dist/babel'));
});


var webpack = require('gulp-webpack');
gulp.task('webpack', function() {
  return gulp.src('dist/babel/main.js')
    .pipe(webpack())
    .pipe(gulp.dest('dist/'));
});
Run Code Online (Sandbox Code Playgroud)

现在,当我运行Gulp任务(babelwebpack)时,我将获得一个文件结果webpack (并且意味着所有需要和导入现在被转换)

这是webpack的结果(我的意思是转换结果):

/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};

/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {

/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;

/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};

/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;

/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}


/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;

/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;

/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";

/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {

	"use strict";

	var _test = __webpack_require__(1);

	var _test2 = _interopRequireDefault(_test);

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

	function callMe() {
		console.log("I am damn called!");
	}

/***/ },
/* 1 */
/***/ function(module, exports) {

	"use strict";

	Object.defineProperty(exports, "__esModule", {
	  value: true
	});

	exports.default = function (string) {
	  console.log("This is awesome!");
	  [1, 2, 3].map(function (n) {
	    return n + 1;
	  });
	};

/***/ }
/******/ ]);
Run Code Online (Sandbox Code Playgroud)

第一个问题是,现在,我如何执行(和访问)webpackcallMe中定义main.js并现在捆绑的功能

另一个问题是,代码看起来很丑陋并不简单,有没有办法简化它?

而且我也认为webpack似乎只是将需求转换为浏览器可支持的版本,并且browserify与Gulp有问题.有什么建议吗?

Mic*_*ski 4

如何执行(和访问)callMe中定义的函数main.js

你不能,因为你没有导出它。您应该将代码更改为类似的内容:

import Test from './test';

export default function callMe(){
  console.log("I am damn called!");
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样导入它:

import callMe from 'dist/main.js';
callMe(); // logs "I am damn called!"
Run Code Online (Sandbox Code Playgroud)

代码看起来很丑而且不简单,有什么办法可以简化一下吗?

没有必要简化它。捆绑代码看起来丑陋并没有什么问题,因为无论如何它都不会被人类阅读。