问题描述
taro-cli 无法指定可编译的目录,当前状态比较混乱,
1, node_modules 不进行编译。
2,node_modules/taro-ui/dist 文件夹下的文件确可以编译
这里想问,什么逻辑?为何不能指定呢?
复现步骤
es6文件放在
node_modules文件夹下,项目引用文件,无法进行编译只会被原样拷贝
期望行为
可以自定义,es6模块,走taro编译
例子:
include:[
"node_modules/xxxx"
]
系统信息
补充信息
图1:自定义包位置

图2:package.json 用file: 引用依赖

图3:编译后 dist/npm 文件夹内,文件被拷贝,但是未编译

node_modules 里文件默认不编译,把所有源码放到 src 目录下就能编译
@luckyadam 不是这个意思,我的意思是,npm install 的东西是 es6 ,这个时候我其实是需要编译的,有没有办法支持,放在src目录下就必须要用相对路径,但是这个项目比较大,相对路径引用太困难,
例子:对request二次封装后,一个文件放在 src/utils/request 目录下,request使用场景很多,每次都是需要 ../../../utils/request.js 或者 ../../../../utils/request.js 这事是一个例子,还有很多文件都会出现该问题,希望支持 node_modules 编译 或者支持 别名
我懂你的意思,目前还不能支持到 node_modules 编译,只能通过放到 src 目录下解决,这个先记一下吧,需要看看如何来调整
能不能这样:
对于 node_modules 中的模块,如果 package.json 中,peerDenpendencies 包含 @tarojs/taro,则进行编译;包含 @tarojs/components 则说明这是一个基于 taro 的 UI 库。
或者在 package.json 中添加新的字段 taro, 然后 taro: true, taro: "ui", taro: "lib" 这样。
便于开发和使用基于 taro 的第三方库。
@cheese-git @1021683053 目前最新的 beta 版本已经支持编译 node_modules 中的文件了
weapp.compile 下通过 include 字段来设置需要编译的包名h5 下通过 esnextModules字段来设置需要编译的包名两个配置都是数组格式
OK 三克油
Thx
编译是编译了,但是没有处理对 Taro 的引用。。。还是没有办法在自己的包里使用 Taro...
还有 ts 文件虽然也会被编译,但是后缀名没改,小程序不认识 😂 不过这个问题不大
编译是编译了,但是没有处理对 Taro 的引用。。。还是没有办法在自己的包里使用 Taro...
还有 ts 文件虽然也会被编译,但是后缀名没改,小程序不认识 😂 不过这个问题不大
Taro 的引用是指?
node_modules 里还是不要有 ts 源文件吧
Taro 的引用是指?
node_modules 里还是不要有 ts 源文件吧
嗯嗯,就是比较懒,平时都直接用 ts-node 执行,不想编译成 js 😂
就是我自己的包里引用了 Taro:
import Taro from '@tarojs/taro'
编译出来的文件是这样:
var _taro = require("@tarojs/taro")
然后就会报找不到模块 @tarojs/taro 的错。
按照我的理解,编译后的文件应该类似于这样才能正常执行:
var _taro = require('../../@tarojs/taro-weapp/index.js')
遇到同样的问题,是否能考虑支持webpack中loader exclude和include的写法,另外在h5.webpackChain中尝试引入新的loader `打包的时候会提示无法找到对应的loder,用的是webpack4。
`chain.module.rule('compile')
.test(/\.ts[x]?$/)
.exclude
.add((path) => {
//是否为node_modules中的模块
var isNodeModules = path.indexOf("node_modules") >= 0;
var isWxpComponents = ["_starter", "oak_", "common_"].some((item) => {
return path.indexOf(item) >= 0;
});
console.log("isWxpComponents", isWxpComponents);
if (isWxpComponents || path.endsWith("_starter")) {
return false;
}
return isNodeModules;
}).end()
.use("typescript")
.loader("awesome-typescript-loader")
.options({
presets: [
[
'env',
{modules: false}
]
]
})`
@cheese-git @1021683053 目前最新的 beta 版本已经支持编译 node_modules 中的文件了
从哪个版本开始支持的呢?
另外文档是否更新下? 谢谢
我尝试了的确 __有效__
我用的 taro 版本是:1.3.9
我的配置是:
weapp: {
compile: {
include: [ 'qxjs/' ]
},
}
如果是node_modules里面的包,直接使用包名,亲测有用
遇到同样问题,在1.3.x还是很难完美解决。我现在的做法是直接本地sync到src,然后用别名来引用
遇到同样问题,在1.3.x还是很难完美解决。我现在的做法是直接本地sync到src,然后用别名来引用
weapp: {
compile: {
include: [
'miniapp-reporter',
],
}
}
配置一下包名就可以
Taro 2 或 3 使用 webpack 构建,应该没有问题了。
Most helpful comment
@cheese-git @1021683053 目前最新的 beta 版本已经支持编译 node_modules 中的文件了
weapp.compile下通过include字段来设置需要编译的包名h5下通过esnextModules字段来设置需要编译的包名两个配置都是数组格式