【问题标题】:Imported constant is undefined导入的常量未定义
【发布时间】:2016-04-30 22:38:36
【问题描述】:

我有一个 server.js 文件和一个 main.js 文件,它们是用 watchify app/src/main.js --node -t babelify -o app/build/main.js & watchify app/src/server.js --node -t babelify -o app/build/server.js

main.js:

const rnd = 3

export { rnd }

server.js:

import { rnd } from '../build/main'

console.log(rnd)

import express from 'express'

let app = express()

app.listen(8080)

但它记录了undefined。我做错了什么?

main.js 构建:

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
var rnd = 3;

exports.rnd = rnd;

},{}]},{},[1]);

server.js 构建:

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
"use strict";

(function e(t, n, r) {
  function s(o, u) {
    if (!n[o]) {
      if (!t[o]) {
        var a = typeof require == "function" && require;if (!u && a) return a(o, !0);if (i) return i(o, !0);var f = new Error("Cannot find module '" + o + "'");throw f.code = "MODULE_NOT_FOUND", f;
      }var l = n[o] = { exports: {} };t[o][0].call(l.exports, function (e) {
        var n = t[o][1][e];return s(n ? n : e);
      }, l, l.exports, e, t, n, r);
    }return n[o].exports;
  }var i = typeof require == "function" && require;for (var o = 0; o < r.length; o++) {
    s(r[o]);
  }return s;
})({ 1: [function (require, module, exports) {
    "use strict";

    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    var rnd = 3;

    exports.rnd = rnd;
  }, {}] }, {}, [1]);

},{}],2:[function(require,module,exports){
'use strict';

var _main = require('../build/main');

var _express = require('express');

var _express2 = _interopRequireDefault(_express);

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

console.log(_main.rnd);

var app = (0, _express2.default)();

app.listen(8080);

},{"../build/main":1,"express":20}],3:[function(require,module,exports){

// ...

【问题讨论】:

  • 你能告诉我们构建的文件吗?
  • 好的,我已将它们添加到帖子中。
  • 如果我是正确的,你正在使用 browserify,但你想使用 Node.js 中的代码,它应该可以正常工作,但我认为你'方向错了,你只需要用 babel 构建源代码,而不是模块加载器,babel 会将你的 ES6 模块语法转换为 Node 的requires,一切都会好起来的。

标签: javascript node.js ecmascript-6 browserify


【解决方案1】:

在 server.js 中你应该从 app/src/main.js 导入

import { rnd } from 'main'

使用 babelify 编写代码,就像在你的环境中拥有所有 ES2015 功能一样(但最好不时检查兼容性表)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多