首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >babel重接线不替换提取变量

babel重接线不替换提取变量
EN

Stack Overflow用户
提问于 2018-02-28 20:39:15
回答 1查看 182关注 0票数 0

我已经将我与babel-plugin-rewire的问题隔离到了这几个文件中。我试图弄清楚为什么console.log(dep)仍然将fetch作为一个函数记录,而不是true,因为它应该被替换。

.babelrc

代码语言:javascript
复制
{
  "presets": [
    "babel-preset-stage-3",
    [
      "babel-preset-env",
      {
        "targets": {
          "node": "4.0.0"
        }
      }
    ]
  ],
  "plugins": [
    "babel-plugin-rewire"
  ]
}

dep.js

代码语言:javascript
复制
const fetch = require('isomorphic-fetch')

module.exports = {fetch}

use.js

代码语言:javascript
复制
const dep = require('./dep')

dep.__Rewire__('fetch', true)

console.log(dep)

package.json

代码语言:javascript
复制
{
  "scripts": {
    "start": "babel-node ./use.js"
  },
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.0",
    "babel-plugin-rewire": "^1.1.0",
    "babel-preset-env": "^1.6.1",
    "babel-preset-stage-3": "^6.24.1"
  },
  "dependencies": {
    "isomorphic-fetch": "^2.2.1"
  }
}
EN

回答 1

Stack Overflow用户

发布于 2018-02-28 21:03:11

好的,刚学到了rewire不改变模块作用域(duh)的困难之处。

dep.js

代码语言:javascript
复制
var Path = require('path');

var env = 'production';

console.log(env)

module.exports = function(name) {
  console.log(env)
  return Path.normalize(name)
}

use.js

代码语言:javascript
复制
var normalizer = require('./dep.js');

normalizer.__Rewire__('Path', {
  normalize: (name) => name
});

console.log(normalizer('/foo/bar//baz/asdf/quux/..'))

normalizer.__Rewire__('env', 'testing');

console.log(normalizer('/foo/bar//baz/asdf/quux/..'))

normalizer.__ResetDependency__('Path');

console.log(normalizer('/foo/bar//baz/asdf/quux/..'))

日志:

代码语言:javascript
复制
production
production
/foo/bar//baz/asdf/quux/..
testing
/foo/bar//baz/asdf/quux/..
testing
/foo/bar/baz/asdf
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49038143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档